summaryrefslogtreecommitdiff
path: root/org.tizen.common
diff options
context:
space:
mode:
Diffstat (limited to 'org.tizen.common')
-rwxr-xr-x[-rw-r--r--]org.tizen.common/.classpath30
-rw-r--r--org.tizen.common/.settings/org.eclipse.core.resources.prefs3
-rwxr-xr-x[-rw-r--r--]org.tizen.common/META-INF/MANIFEST.MF146
-rw-r--r--org.tizen.common/OSGI-INF/l10n/bundle.properties25
-rw-r--r--org.tizen.common/about.html12
-rw-r--r--org.tizen.common/about_files/freemarker-LICENSE.txt69
-rwxr-xr-x[-rw-r--r--]org.tizen.common/build.properties11
-rw-r--r--org.tizen.common/icons/back.gifbin0 -> 327 bytes
-rw-r--r--org.tizen.common/icons/forward.gifbin0 -> 327 bytes
-rw-r--r--org.tizen.common/lib/commons-collections-3.2.1.jarbin0 -> 575389 bytes
-rw-r--r--org.tizen.common/lib/commons-io-2.4.jarbin0 -> 185140 bytes
-rw-r--r--org.tizen.common/lib/commons-lang3-3.1.jarbin0 -> 315805 bytes
-rw-r--r--org.tizen.common/lib/commons-logging-1.1.1.jarbin0 -> 60686 bytes
-rw-r--r--org.tizen.common/lib/commons-pool-1.6.jarbin0 -> 111119 bytes
-rw-r--r--org.tizen.common/lib/freemarker.jarbin0 -> 924269 bytes
-rw-r--r--org.tizen.common/lib/log4j-1.2.17.jarbin0 -> 489883 bytes
-rw-r--r--org.tizen.common/lib/sdblib.jarbin0 -> 77370 bytes
-rw-r--r--org.tizen.common/lib/slf4j-api-1.6.4.jarbin0 -> 25962 bytes
-rw-r--r--org.tizen.common/lib/slf4j-log4j12-1.6.4.jarbin0 -> 9748 bytes
-rw-r--r--org.tizen.common/plugin.xml105
-rw-r--r--org.tizen.common/schema/org.tizen.common.prompter.exsd109
-rw-r--r--org.tizen.common/sdblib.jarbin65586 -> 0 bytes
-rw-r--r--org.tizen.common/src/org/tizen/common/Adaptable.java49
-rw-r--r--org.tizen.common/src/org/tizen/common/AppIdGenerator.java127
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/Cabinet.java10
-rw-r--r--org.tizen.common/src/org/tizen/common/CommonPlugin.java147
-rw-r--r--org.tizen.common/src/org/tizen/common/Factory.java (renamed from org.tizen.common/src/org/tizen/common/model/DefaultTableModel.java)88
-rw-r--r--org.tizen.common/src/org/tizen/common/FactoryWithArgument.java (renamed from org.tizen.common/src/org/tizen/common/control/TableViewContentProvider.java)95
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/IApplicationConfiguration.java39
-rw-r--r--org.tizen.common/src/org/tizen/common/Surrogate.java44
-rw-r--r--org.tizen.common/src/org/tizen/common/SurrogateWithArgument.java (renamed from org.tizen.common/src/org/tizen/common/control/TreeViewLabelProvider.java)74
-rw-r--r--org.tizen.common/src/org/tizen/common/TizenHelpContextIds.java49
-rw-r--r--org.tizen.common/src/org/tizen/common/TizenPlatformConstants.java80
-rw-r--r--org.tizen.common/src/org/tizen/common/TizenProjectType.java41
-rw-r--r--org.tizen.common/src/org/tizen/common/cache/ImageCache.java105
-rw-r--r--org.tizen.common/src/org/tizen/common/control/TableViewCellModifier.java136
-rw-r--r--org.tizen.common/src/org/tizen/common/control/TableViewColumnSorter.java160
-rw-r--r--org.tizen.common/src/org/tizen/common/control/TableViewLabelProvider.java121
-rw-r--r--org.tizen.common/src/org/tizen/common/control/TreeViewContentProvider.java69
-rw-r--r--org.tizen.common/src/org/tizen/common/core/application/InstallPathConfig.java212
-rw-r--r--org.tizen.common/src/org/tizen/common/core/application/Messages.java19
-rw-r--r--org.tizen.common/src/org/tizen/common/core/application/Messages.properties5
-rw-r--r--org.tizen.common/src/org/tizen/common/core/application/StatusLineMessageManager.java80
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/core/application/UpdateManager.java (renamed from org.tizen.common/src/org/tizen/common/update/UpdateManager.java)77
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/AbstractCommand.java94
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/Command.java69
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/CommandCancelException.java45
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/CompositeCommand.java103
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/EclipseExecutor.java70
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/ExecutionContext.java138
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/Executor.java213
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/Policy.java154
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/PolicyRegistryFactory.java240
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/Prompter.java94
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java145
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/file/FileHandlingCommand.java192
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/file/WriteFileCommand.java40
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/AbstractMessagePolicy.java66
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/AbstractPolicy.java73
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/FilePolicy.java76
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/MessagePolicy.java146
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/OptionPolicy.java60
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/PolicyRegistry.java294
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/SimplePolicy.java49
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/policy/UncaughtExceptionHandlingPolicy.java113
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractOption.java181
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractPrompter.java86
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/ChoiceOption.java95
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/EclipsePrompter.java201
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/GenericOption.java149
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/NopPrompter.java129
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/Option.java11
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/prompter/RunableOption.java124
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/core/command/prompter/SWTPrompter.java233
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/DevicesSdbCommand.java65
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/DlogSdbCommand.java54
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/ForwardSdbCommand.java70
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/PullSdbCommand.java87
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/PushSdbCommand.java93
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/SdbDevicesHandlingCommand.java (renamed from org.tizen.common/src/org/tizen/common/model/DefaultTreeModel.java)89
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/SdbHandlingCommand.java60
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/ShellSdbCommand.java142
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/sdb/SmartDevelopmentBridgeManager.java93
-rw-r--r--org.tizen.common/src/org/tizen/common/core/command/zip/ZipCommand.java196
-rw-r--r--org.tizen.common/src/org/tizen/common/file/AbstractFileHandler.java66
-rw-r--r--org.tizen.common/src/org/tizen/common/file/EclipseFileHandler.java448
-rw-r--r--org.tizen.common/src/org/tizen/common/file/FileHandler.java235
-rw-r--r--org.tizen.common/src/org/tizen/common/file/Filter.java48
-rw-r--r--org.tizen.common/src/org/tizen/common/file/PatternFilter.java77
-rw-r--r--org.tizen.common/src/org/tizen/common/file/SimpleFileFilter.java193
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/file/StandardFileHandler.java394
-rw-r--r--org.tizen.common/src/org/tizen/common/file/VirtualFileHandler.java798
-rw-r--r--org.tizen.common/src/org/tizen/common/file/filter/WildCardFilter.java96
-rw-r--r--org.tizen.common/src/org/tizen/common/file/filter/WildCardFilterFactory.java60
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/ClearHandler.java65
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/ClipboardHandler.java51
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/CopyHandler.java101
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/Messages.java49
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/OpenFileHandler.java103
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/OpenPreferencesHandler.java61
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/SaveFileHandler.java139
-rw-r--r--org.tizen.common/src/org/tizen/common/handler/messages.properties10
-rw-r--r--org.tizen.common/src/org/tizen/common/manager/StatusLineMessageManager.java47
-rw-r--r--org.tizen.common/src/org/tizen/common/manager/messages.properties1
-rw-r--r--org.tizen.common/src/org/tizen/common/model/AbstractTableModel.java180
-rw-r--r--org.tizen.common/src/org/tizen/common/model/AbstractTableVO.java80
-rw-r--r--org.tizen.common/src/org/tizen/common/model/AbstractTreeModel.java102
-rw-r--r--org.tizen.common/src/org/tizen/common/model/AbstractTreeVO.java109
-rw-r--r--org.tizen.common/src/org/tizen/common/model/ITableModel.java45
-rw-r--r--org.tizen.common/src/org/tizen/common/model/ITreeVO.java42
-rw-r--r--org.tizen.common/src/org/tizen/common/model/IVO.java29
-rw-r--r--org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.properties6
-rw-r--r--org.tizen.common/src/org/tizen/common/properties/InstallPathConfig.java141
-rw-r--r--org.tizen.common/src/org/tizen/common/queue/Queue.java71
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/CommonColor.java (renamed from org.tizen.common/src/org/tizen/common/swt/CommonColor.java)20
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java133
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/dialog/ClosableTray.java (renamed from org.tizen.common/src/org/tizen/common/swt/ClosableTray.java)7
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/dialog/PasswordInputDialog.java114
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.java (renamed from org.tizen.common/src/org/tizen/common/manager/Messages.java)23
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.properties5
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.java (renamed from org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.java)2
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.properties5
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/page/preference/TizenBasePreferencePage.java (renamed from org.tizen.common/src/org/tizen/common/preferences/TizenBasePreferencePage.java)22
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/page/wizard/TrayWizardPage.java (renamed from org.tizen.common/src/org/tizen/common/swt/TrayWizardPage.java)3
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/ui/view/console/AnsicodeAdapter.java (renamed from org.tizen.common/src/org/tizen/common/console/AnsicodeAdapter.java)122
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager.java (renamed from org.tizen.common/src/org/tizen/common/console/ConsoleManager.java)5
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager2.java411
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleProcessClosure.java (renamed from org.tizen.common/src/org/tizen/common/console/ConsoleProcessClosure.java)36
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/HyperlinkManager.java131
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/IConsolePrinter.java46
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/IHyperlinkManager.java (renamed from org.tizen.common/src/org/tizen/common/model/ITableVO.java)81
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/LinkInfo.java151
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/MessageConsoleSpy.java55
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/view/console/TextStyle.java (renamed from org.tizen.common/src/org/tizen/common/console/TextStyle.java)2
-rw-r--r--org.tizen.common/src/org/tizen/common/ui/widget/PictureLabel.java (renamed from org.tizen.common/src/org/tizen/common/swt/PictureLabel.java)5
-rw-r--r--org.tizen.common/src/org/tizen/common/update/UpdateMessages.properties3
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/util/ArrayUtil.java1124
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/util/Assert.java837
-rw-r--r--org.tizen.common/src/org/tizen/common/util/BrowserWrapper.java5
-rw-r--r--org.tizen.common/src/org/tizen/common/util/CipherUtil.java97
-rw-r--r--org.tizen.common/src/org/tizen/common/util/CollectionMap.java232
-rw-r--r--org.tizen.common/src/org/tizen/common/util/CollectionUtil.java1890
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ControlFileConfig.java4
-rw-r--r--org.tizen.common/src/org/tizen/common/util/DialogUtil.java9
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/util/EFSUtil.java303
-rw-r--r--org.tizen.common/src/org/tizen/common/util/FileUtil.java312
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/util/FilenameUtil.java422
-rw-r--r--org.tizen.common/src/org/tizen/common/util/FilterIterator.java158
-rw-r--r--org.tizen.common/src/org/tizen/common/util/FreeMarkerUtil.java180
-rw-r--r--org.tizen.common/src/org/tizen/common/util/HelpBrowser.java120
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/util/HostUtil.java609
-rw-r--r--org.tizen.common/src/org/tizen/common/util/IOUtil.java352
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ImageUtil.java (renamed from org.tizen.common/src/org/tizen/common/util/ImageUtils.java)66
-rw-r--r--org.tizen.common/src/org/tizen/common/util/IteratingAcceptor.java49
-rw-r--r--org.tizen.common/src/org/tizen/common/util/IteratingAdapter.java7
-rw-r--r--org.tizen.common/src/org/tizen/common/util/IteratingRunner.java (renamed from org.tizen.common/src/org/tizen/common/model/ITreeModel.java)89
-rw-r--r--org.tizen.common/src/org/tizen/common/util/IteratingUtil.java27
-rw-r--r--org.tizen.common/src/org/tizen/common/util/LocalPortChecker.java75
-rw-r--r--org.tizen.common/src/org/tizen/common/util/MapUtil.java219
-rw-r--r--org.tizen.common/src/org/tizen/common/util/NotificationType.java2
-rw-r--r--org.tizen.common/src/org/tizen/common/util/NotifierDialog.java17
-rw-r--r--org.tizen.common/src/org/tizen/common/util/OSChecker.java37
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ObjectUtil.java411
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ParsingUtil.java183
-rw-r--r--org.tizen.common/src/org/tizen/common/util/PluginUtil.java105
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ProjectUtil.java199
-rw-r--r--org.tizen.common/src/org/tizen/common/util/PropertyUtil.java27
-rwxr-xr-xorg.tizen.common/src/org/tizen/common/util/SWTRunner.java44
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/util/SWTUtil.java294
-rw-r--r--org.tizen.common/src/org/tizen/common/util/SdbCommandUtil.java76
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/util/StreamGobbler.java9
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/util/StringUtil.java1072
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ThreadUtil.java60
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ValidationUtil.java94
-rw-r--r--org.tizen.common/src/org/tizen/common/util/ViewUtil.java25
-rw-r--r--org.tizen.common/src/org/tizen/common/util/cache/ColorCache.java (renamed from org.tizen.common/src/org/tizen/common/cache/ColorCache.java)41
-rwxr-xr-x[-rw-r--r--]org.tizen.common/src/org/tizen/common/util/cache/FontCache.java (renamed from org.tizen.common/src/org/tizen/common/cache/FontCache.java)30
-rw-r--r--org.tizen.common/src/org/tizen/common/util/cache/ImageCache.java108
-rw-r--r--org.tizen.common/src/org/tizen/common/util/cache/NamedColorCache.java (renamed from org.tizen.common/src/org/tizen/common/manager/ColorCache.java)14
-rw-r--r--org.tizen.common/src/org/tizen/common/util/io/Buffer.java504
-rw-r--r--org.tizen.common/src/org/tizen/common/util/io/BufferInputStream.java81
-rw-r--r--org.tizen.common/src/org/tizen/common/util/io/BufferOutputStream.java94
-rw-r--r--org.tizen.common/src/org/tizen/common/util/io/BufferPool.java248
-rw-r--r--org.tizen.common/src/org/tizen/common/util/log/Logger.java (renamed from org.tizen.common/src/org/tizen/common/log/Logger.java)9
-rw-r--r--org.tizen.common/src/org/tizen/common/util/url/classpath/Connection.java181
-rw-r--r--org.tizen.common/src/org/tizen/common/util/url/classpath/Handler.java104
-rw-r--r--org.tizen.common/src/org/tizen/common/util/url/cp/Connection.java54
-rw-r--r--org.tizen.common/src/org/tizen/common/util/url/cp/Handler.java60
-rw-r--r--org.tizen.common/src/org/tizen/common/util/url/vf/Connection.java125
-rw-r--r--org.tizen.common/src/org/tizen/common/util/url/vf/Handler.java59
-rw-r--r--org.tizen.common/test/lib/asm-4.0.jarbin0 -> 46018 bytes
-rw-r--r--org.tizen.common/test/lib/asm-tree-4.0.jarbin0 -> 21980 bytes
-rw-r--r--org.tizen.common/test/lib/junit-4.10-src.jarbin0 -> 141185 bytes
-rw-r--r--org.tizen.common/test/lib/junit-4.10.jarbin0 -> 253160 bytes
-rw-r--r--org.tizen.common/test/lib/mockito-all-1.9.0.jarbin0 -> 1495219 bytes
-rwxr-xr-xorg.tizen.common/test/src/log4j.xml15
-rw-r--r--org.tizen.common/test/src/org/tizen/common/AppIdGeneratorTest.java76
-rw-r--r--org.tizen.common/test/src/org/tizen/common/ClassSource.java53
-rw-r--r--org.tizen.common/test/src/org/tizen/common/CommonPluginTest.java80
-rw-r--r--org.tizen.common/test/src/org/tizen/common/DirectorySource.java85
-rw-r--r--org.tizen.common/test/src/org/tizen/common/FrequentlyUsedMatcher.java70
-rw-r--r--org.tizen.common/test/src/org/tizen/common/JarSource.java103
-rw-r--r--org.tizen.common/test/src/org/tizen/common/Location.java53
-rw-r--r--org.tizen.common/test/src/org/tizen/common/TestAgent.java17
-rw-r--r--org.tizen.common/test/src/org/tizen/common/Transformer.java38
-rw-r--r--org.tizen.common/test/src/org/tizen/common/UnsafeClassLoader.java255
-rw-r--r--org.tizen.common/test/src/org/tizen/common/UnsafeRunner.java180
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/application/MessagesTest.java58
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/application/StatusLineMessageManagerTest.java95
-rwxr-xr-xorg.tizen.common/test/src/org/tizen/common/core/command/CommandTest.java151
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/CompositeCommandTest.java104
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/ExecutionContextTest.java100
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/file/FileHandlingCommandTest.java103
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/policy/PolicyRegistryTest.java72
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/prompter/GenericOptionTest.java98
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/prompter/OptionTest.java91
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/prompter/SWTPrompterTest.java109
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/sdb/DevicesSdbCommandTest.java68
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/sdb/DlogSdbCommandTest.java82
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/sdb/ForwardSdbCommandTest.java94
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/sdb/PullSdbCommandTest.java83
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/sdb/PushSdbCommandTest.java71
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/sdb/ShellSdbCommandTest.java111
-rw-r--r--org.tizen.common/test/src/org/tizen/common/core/command/zip/ZipCommandTest.java79
-rwxr-xr-xorg.tizen.common/test/src/org/tizen/common/file/SimpleFileFilterTest.java90
-rw-r--r--org.tizen.common/test/src/org/tizen/common/file/VirtualFileHandlerTest.java71
-rw-r--r--org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterFactoryTest.java81
-rw-r--r--org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterTest.java89
-rw-r--r--org.tizen.common/test/src/org/tizen/common/ui/page/preference/MessagesTest.java66
-rw-r--r--org.tizen.common/test/src/org/tizen/common/ui/page/wizard/TrayWizardPageTest.java91
-rwxr-xr-xorg.tizen.common/test/src/org/tizen/common/util/ArrayUtilTest.java765
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/AssertTest.java158
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/CollectionMapTest.java139
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/CollectionUtilTest.java950
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/EFSUtilTest.java240
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/FileUtilTest.java113
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/FilenameUtilTest.java256
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/FilterIteratorTest.java70
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/FreeMarkerUtilTest.java62
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/HostUtilTest.java117
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/IOUtilTest.java242
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.java276
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.pngbin0 -> 1472 bytes
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/LocalPortCheckerTest.java105
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/MapUtilTest.java205
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/MockRunner.java (renamed from org.tizen.common/src/org/tizen/common/control/NotSupportedTypeException.java)27
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/ObjectUtilTest.java140
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/ParsingUtilTest.java108
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/PluginUtilTest.java111
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/SWTUtilTest.java123
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/StringUtilTest.java459
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/ThreadUtilTest.java70
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/ValidationUtilTest.java146
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/io/BufferPoolTest.java90
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/io/BufferTest.java274
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/test1
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/url/classpath/ConnectionTest.java92
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/url/classpath/HandlerTest.java126
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/url/classpath/a.txt1
-rw-r--r--org.tizen.common/test/src/org/tizen/common/util/url/cp/HandlerTest.java115
260 files changed, 29256 insertions, 3158 deletions
diff --git a/org.tizen.common/.classpath b/org.tizen.common/.classpath
index c619f68c7..8e01f7b73 100644..100755
--- a/org.tizen.common/.classpath
+++ b/org.tizen.common/.classpath
@@ -1,8 +1,22 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry exported="true" kind="lib" path="sdblib.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry exported="true" kind="lib" path="lib/commons-logging-1.1.1.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/commons-collections-3.2.1.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/commons-pool-1.6.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/commons-lang3-3.1.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/commons-io-2.4.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/freemarker.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/log4j-1.2.17.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/sdblib.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/slf4j-api-1.6.4.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/slf4j-log4j12-1.6.4.jar"/>
+ <classpathentry exported="true" kind="lib" path="test/lib/junit-4.10.jar" sourcepath="test/lib/junit-4.10-src.jar"/>
+ <classpathentry exported="true" kind="lib" path="test/lib/mockito-all-1.9.0.jar"/>
+ <classpathentry kind="lib" path="test/lib/asm-4.0.jar"/>
+ <classpathentry kind="lib" path="test/lib/asm-tree-4.0.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="test/src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.tizen.common/.settings/org.eclipse.core.resources.prefs b/org.tizen.common/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..05557bad8
--- /dev/null
+++ b/org.tizen.common/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Jun 05 12:49:09 KST 2012
+eclipse.preferences.version=1
+encoding/<project>=utf-8
diff --git a/org.tizen.common/META-INF/MANIFEST.MF b/org.tizen.common/META-INF/MANIFEST.MF
index 70adb4a31..39657a904 100644..100755
--- a/org.tizen.common/META-INF/MANIFEST.MF
+++ b/org.tizen.common/META-INF/MANIFEST.MF
@@ -1,30 +1,148 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
-Bundle-Name: Tizen Common
+Bundle-Name: %Bundle-Name
Bundle-SymbolicName: org.tizen.common;singleton:=true
Bundle-Version: 1.0.0.qualifier
-Bundle-Vendor: Samsung
+Bundle-Vendor: %Bundle-Vendor
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.ui.ide,
org.eclipse.core.resources,
org.eclipse.core.filesystem
Export-Package:
- org.tizen.sdblib,
- org.tizen.common.cache,
- org.tizen.common.console,
- org.tizen.common.control,
- org.tizen.common.log,
- org.tizen.common.manager,
- org.tizen.common.model,
- org.tizen.common.properties,
- org.tizen.common.swt,
- org.tizen.common.util
+ freemarker.ext.dom,
+ freemarker.template,
+ org.apache.commons.lang3,
+ org.apache.commons.lang3.builder,
+ org.apache.commons.lang3.concurrent,
+ org.apache.commons.lang3.event,
+ org.apache.commons.lang3.exception,
+ org.apache.commons.lang3.math,
+ org.apache.commons.lang3.mutable,
+ org.apache.commons.lang3.reflect,
+ org.apache.commons.lang3.text,
+ org.apache.commons.lang3.text.translate,
+ org.apache.commons.lang3.time,
+ org.apache.commons.lang3.tuple,
+ org.apache.commons.logging,
+ org.junit,
+ org.junit.experimental,
+ org.junit.experimental.categories,
+ org.junit.experimental.max,
+ org.junit.experimental.results,
+ org.junit.experimental.runners,
+ org.junit.experimental.theories,
+ org.junit.experimental.theories.internal,
+ org.junit.experimental.theories.suppliers,
+ org.junit.internal,
+ org.junit.internal.builders,
+ org.junit.internal.matchers,
+ org.junit.internal.requests,
+ org.junit.internal.runners,
+ org.junit.internal.runners.model,
+ org.junit.internal.runners.rules,
+ org.junit.internal.runners.statements,
+ org.junit.matchers,
+ org.junit.rules,
+ org.junit.runner,
+ org.junit.runner.manipulation,
+ org.junit.runner.notification,
+ org.junit.runners,
+ org.junit.runners.model,
+ org.mockito,
+ org.mockito.asm,
+ org.mockito.asm.signature,
+ org.mockito.asm.tree,
+ org.mockito.asm.tree.analysis,
+ org.mockito.asm.util,
+ org.mockito.cglib.beans,
+ org.mockito.cglib.core,
+ org.mockito.cglib.proxy,
+ org.mockito.cglib.reflect,
+ org.mockito.cglib.transform,
+ org.mockito.cglib.transform.impl,
+ org.mockito.cglib.util,
+ org.mockito.configuration,
+ org.mockito.exceptions,
+ org.mockito.exceptions.base,
+ org.mockito.exceptions.misusing,
+ org.mockito.exceptions.verification,
+ org.mockito.exceptions.verification.junit,
+ org.mockito.internal,
+ org.mockito.internal.configuration,
+ org.mockito.internal.configuration.injection,
+ org.mockito.internal.configuration.injection.filter,
+ org.mockito.internal.creation,
+ org.mockito.internal.creation.cglib,
+ org.mockito.internal.creation.jmock,
+ org.mockito.internal.debugging,
+ org.mockito.internal.exceptions,
+ org.mockito.internal.exceptions.base,
+ org.mockito.internal.exceptions.util,
+ org.mockito.internal.invocation,
+ org.mockito.internal.invocation.finder,
+ org.mockito.internal.invocation.realmethod,
+ org.mockito.internal.listeners,
+ org.mockito.internal.matchers,
+ org.mockito.internal.matchers.apachecommons,
+ org.mockito.internal.progress,
+ org.mockito.internal.reporting,
+ org.mockito.internal.runners,
+ org.mockito.internal.runners.util,
+ org.mockito.internal.stubbing,
+ org.mockito.internal.stubbing.answers,
+ org.mockito.internal.stubbing.defaultanswers,
+ org.mockito.internal.util,
+ org.mockito.internal.util.junit,
+ org.mockito.internal.util.reflection,
+ org.mockito.internal.verification,
+ org.mockito.internal.verification.api,
+ org.mockito.internal.verification.argumentmatching,
+ org.mockito.internal.verification.checkers,
+ org.mockito.invocation,
+ org.mockito.listeners,
+ org.mockito.runners,
+ org.mockito.stubbing,
+ org.mockito.stubbing.answers,
+ org.mockito.verification,
+ org.slf4j,
+ org.tizen.common,
+ org.tizen.common.core.application,
+ org.tizen.common.core.command,
+ org.tizen.common.core.command.file,
+ org.tizen.common.core.command.policy,
+ org.tizen.common.core.command.prompter,
+ org.tizen.common.core.command.sdb,
+ org.tizen.common.core.command.zip,
+ org.tizen.common.file,
+ org.tizen.common.file.filter,
+ org.tizen.common.ui,
+ org.tizen.common.ui.dialog,
+ org.tizen.common.ui.page.preference,
+ org.tizen.common.ui.page.wizard,
+ org.tizen.common.ui.view.console,
+ org.tizen.common.ui.widget,
+ org.tizen.common.util,
+ org.tizen.common.util.cache,
+ org.tizen.common.util.log,
+ org.tizen.common.util.url.classpath,
+ org.tizen.common.util.url.cp,
+ org.tizen.common.util.url.vf,
+ org.tizen.sdblib
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package:
org.eclipse.jface.text,
org.eclipse.ui.console
Bundle-Activator: org.tizen.common.CommonPlugin
Bundle-ActivationPolicy: lazy
-Bundle-ClassPath: sdblib.jar,
- .
+Bundle-ClassPath: .,
+ lib/log4j-1.2.17.jar,
+ lib/sdblib.jar,
+ lib/slf4j-api-1.6.4.jar,
+ lib/slf4j-log4j12-1.6.4.jar,
+ lib/freemarker.jar,
+ lib/commons-io-2.4.jar,
+ lib/commons-lang3-3.1.jar,
+ lib/commons-collections-3.2.1.jar,
+ lib/commons-pool-1.6.jar,
+ lib/commons-logging-1.1.1.jar
diff --git a/org.tizen.common/OSGI-INF/l10n/bundle.properties b/org.tizen.common/OSGI-INF/l10n/bundle.properties
index 99ec9ad7c..c4bd08c3c 100644
--- a/org.tizen.common/OSGI-INF/l10n/bundle.properties
+++ b/org.tizen.common/OSGI-INF/l10n/bundle.properties
@@ -1,3 +1,26 @@
+Bundle-Vendor = Samsung Electronics
+
activity.name = newXsdDisabler
activity.name.0 = newDtdDisabler
-activity.name.1 = ValidateMenuItemDisabler \ No newline at end of file
+activity.name.1 = ValidateMenuItemDisabler
+
+category.name = Tizen
+page.name = Tizen SDK
+activity.description = Popup UI
+activity.name.2 = Popup UI
+category.description = Disable CDT launch UI when Native App Perspective is activated.
+category.name.0 = CDT launch UI
+activity.description.0 = Launch UI elements from CDT
+activity.name.3 = CDT Launch UI Elements
+category.description.0 = Disable CDT Toolchain Editor Page when Tizen Perspective is activated.
+category.name.1 = CDT ToolChain Editor Page
+activity.description.1 = ToolChain Editor Property Page
+activity.name.4 = CDT ToolChain Editor Page Elements
+activity.description.2 = Wizard UI
+activity.name.5 = Wizard UI
+activity.description.3 = PopupMenus
+activity.name.6 = PopupMenus
+category.name.2 = Tizen
+category.name.3 = Tizen
+extension-point.name = Prompter
+Bundle-Name = Tizen Common \ No newline at end of file
diff --git a/org.tizen.common/about.html b/org.tizen.common/about.html
index 95bb5ff8f..d71322765 100644
--- a/org.tizen.common/about.html
+++ b/org.tizen.common/about.html
@@ -37,5 +37,17 @@ A copy of the license is included in <a href="about_files/epl-v10.html">about_fi
</ul>
</p>
+<h4>FreeMarker</h4>
+<p>
+FreeMarker is a "template engine"; a generic tool to generate text output (anything from HTML to autogenerated source code) based on templates. It's a Java package, a class library for Java programmers. It's not an application for end-users in itself, but something that programmers can embed into their products.
+</p>
+
+<p>
+A copy of the license is included in <a href="about_files/freemarker-LICENSE.txt">about_files/freemarker-LICENSE.txt</a>. The home page is located at:
+<ul>
+<a href="http://freemarker.sourceforge.net/">http://freemarker.sourceforge.net/</a>
+</ul>
+</p>
+
</body>
</html> \ No newline at end of file
diff --git a/org.tizen.common/about_files/freemarker-LICENSE.txt b/org.tizen.common/about_files/freemarker-LICENSE.txt
new file mode 100644
index 000000000..4c5f08621
--- /dev/null
+++ b/org.tizen.common/about_files/freemarker-LICENSE.txt
@@ -0,0 +1,69 @@
+FreeMarker 1.x was released under the LGPL license. Later, by community
+consensus, we have switched over to a BSD-style license. As of FreeMarker
+2.2pre1, the original author, Benjamin Geer, has relinquished the copyright in
+behalf of Visigoth Software Society. The current copyright holder is the
+Visigoth Software Society.
+
+------------------------------------------------------------------------------
+Copyright (c) 2003 The Visigoth Software Society. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2. The end-user documentation included with the redistribution, if any, must
+ include the following acknowlegement:
+ "This product includes software developed by the
+ Visigoth Software Society (http://www.visigoths.org/)."
+ Alternately, this acknowlegement may appear in the software itself, if and
+ wherever such third-party acknowlegements normally appear.
+
+3. Neither the name "FreeMarker", "Visigoth", nor any of the names of the
+ project contributors may be used to endorse or promote products derived
+ from this software without prior written permission. For written
+ permission, please contact visigoths@visigoths.org.
+
+4. Products derived from this software may not be called "FreeMarker" or
+ "Visigoth" nor may "FreeMarker" or "Visigoth" appear in their names
+ without prior written permission of the Visigoth Software Society.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+VISIGOTH SOFTWARE SOCIETY OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+------------------------------------------------------------------------------
+
+This software consists of voluntary contributions made by many individuals on
+behalf of the Visigoth Software Society. For more information on the Visigoth
+Software Society, please see http://www.visigoths.org/
+
+------------------------------------------------------------------------------
+
+FREEMARKER SUBCOMPONENTS UNDER DIFFERENT LICENSE:
+
+FreeMarker includes a number of subcomponents that are licensed by the Apache
+Software Foundation under the Apache License, Version 2.0. Your use of these
+subcomponents is subject to the terms and conditions of the Apache License,
+Version 2.0. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+The subcomponents under this licence are the following files, which are
+included both in freemarker.jar and in the source code:
+
+ freemarker/ext/jsp/web-app_2_2.dtd
+ freemarker/ext/jsp/web-app_2_3.dtd
+ freemarker/ext/jsp/web-app_2_4.xsd
+ freemarker/ext/jsp/web-app_2_5.xsd
+ freemarker/ext/jsp/web-jsptaglibrary_1_1.dtd
+ freemarker/ext/jsp/web-jsptaglibrary_1_2.dtd
+ freemarker/ext/jsp/web-jsptaglibrary_2_0.xsd
+ freemarker/ext/jsp/web-jsptaglibrary_2_1.xsd
diff --git a/org.tizen.common/build.properties b/org.tizen.common/build.properties
index 889acffc9..49d1a304d 100644..100755
--- a/org.tizen.common/build.properties
+++ b/org.tizen.common/build.properties
@@ -3,9 +3,16 @@ output.. = bin/
bin.includes = META-INF/,\
.,\
icons/,\
- sdblib.jar,\
about.html,\
about_files/,\
- plugin.xml
+ plugin.xml,\
+ lib/,\
+ lib/commons-io-2.4.jar,\
+ lib/commons-lang3-3.1.jar,\
+ lib/commons-collections-3.2.1.jar,\
+ lib/commons-pool-1.6.jar,\
+ OSGI-INF/,\
+ OSGI-INF/l10n/bundle.properties,\
+ lib/commons-logging-1.1.1.jar
javacSource = 1.6
javacTarget = 1.6
diff --git a/org.tizen.common/icons/back.gif b/org.tizen.common/icons/back.gif
new file mode 100644
index 000000000..4fb415010
--- /dev/null
+++ b/org.tizen.common/icons/back.gif
Binary files differ
diff --git a/org.tizen.common/icons/forward.gif b/org.tizen.common/icons/forward.gif
new file mode 100644
index 000000000..e2f8c3e1f
--- /dev/null
+++ b/org.tizen.common/icons/forward.gif
Binary files differ
diff --git a/org.tizen.common/lib/commons-collections-3.2.1.jar b/org.tizen.common/lib/commons-collections-3.2.1.jar
new file mode 100644
index 000000000..c35fa1fee
--- /dev/null
+++ b/org.tizen.common/lib/commons-collections-3.2.1.jar
Binary files differ
diff --git a/org.tizen.common/lib/commons-io-2.4.jar b/org.tizen.common/lib/commons-io-2.4.jar
new file mode 100644
index 000000000..90035a4fe
--- /dev/null
+++ b/org.tizen.common/lib/commons-io-2.4.jar
Binary files differ
diff --git a/org.tizen.common/lib/commons-lang3-3.1.jar b/org.tizen.common/lib/commons-lang3-3.1.jar
new file mode 100644
index 000000000..a85e539b1
--- /dev/null
+++ b/org.tizen.common/lib/commons-lang3-3.1.jar
Binary files differ
diff --git a/org.tizen.common/lib/commons-logging-1.1.1.jar b/org.tizen.common/lib/commons-logging-1.1.1.jar
new file mode 100644
index 000000000..1deef144c
--- /dev/null
+++ b/org.tizen.common/lib/commons-logging-1.1.1.jar
Binary files differ
diff --git a/org.tizen.common/lib/commons-pool-1.6.jar b/org.tizen.common/lib/commons-pool-1.6.jar
new file mode 100644
index 000000000..72ca75a3e
--- /dev/null
+++ b/org.tizen.common/lib/commons-pool-1.6.jar
Binary files differ
diff --git a/org.tizen.common/lib/freemarker.jar b/org.tizen.common/lib/freemarker.jar
new file mode 100644
index 000000000..b3673e229
--- /dev/null
+++ b/org.tizen.common/lib/freemarker.jar
Binary files differ
diff --git a/org.tizen.common/lib/log4j-1.2.17.jar b/org.tizen.common/lib/log4j-1.2.17.jar
new file mode 100644
index 000000000..068867ebf
--- /dev/null
+++ b/org.tizen.common/lib/log4j-1.2.17.jar
Binary files differ
diff --git a/org.tizen.common/lib/sdblib.jar b/org.tizen.common/lib/sdblib.jar
new file mode 100644
index 000000000..dc3036939
--- /dev/null
+++ b/org.tizen.common/lib/sdblib.jar
Binary files differ
diff --git a/org.tizen.common/lib/slf4j-api-1.6.4.jar b/org.tizen.common/lib/slf4j-api-1.6.4.jar
new file mode 100644
index 000000000..4d23f41d3
--- /dev/null
+++ b/org.tizen.common/lib/slf4j-api-1.6.4.jar
Binary files differ
diff --git a/org.tizen.common/lib/slf4j-log4j12-1.6.4.jar b/org.tizen.common/lib/slf4j-log4j12-1.6.4.jar
new file mode 100644
index 000000000..daa3aa163
--- /dev/null
+++ b/org.tizen.common/lib/slf4j-log4j12-1.6.4.jar
Binary files differ
diff --git a/org.tizen.common/plugin.xml b/org.tizen.common/plugin.xml
index 8deffd8f4..1f584bf04 100644
--- a/org.tizen.common/plugin.xml
+++ b/org.tizen.common/plugin.xml
@@ -1,25 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
+ <extension-point id="org.tizen.common.prompter" name="%extension-point.name" schema="schema/org.tizen.common.prompter.exsd"/>
+ <extension
+ point="org.eclipse.ui.bindings">
+ <key
+ commandId="org.eclipse.ui.project.buildProject"
+ contextId="org.eclipse.ui.contexts.window"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="F10">
+ </key>
+ <key
+ commandId="org.eclipse.ui.project.buildProject"
+ contextId="org.eclipse.ui.contexts.window"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="M1+M2+F10">
+ </key>
+ </extension>
<extension
point="org.eclipse.ui.newWizards">
<category
id="org.tizen.nativeapp.newCategory"
- name="Tizen">
+ name="%category.name">
</category>
</extension>
<extension
point="org.eclipse.ui.preferencePages">
<page
- class="org.tizen.common.preferences.TizenBasePreferencePage"
+ class="org.tizen.common.ui.page.preference.TizenBasePreferencePage"
id="org.tizen.common.preferences.tizencommon"
- name="Tizen SDK">
+ name="%page.name">
</page>
</extension>
<extension
point="org.eclipse.ui.startup">
<startup
- class="org.tizen.common.update.UpdateManager">
+ class="org.tizen.common.core.application.UpdateManager">
</startup>
</extension>
<!-- activities start -->
@@ -27,18 +43,21 @@
point="org.eclipse.ui.activities">
<!-- disable rhino lauch shortcuts & wst launch shortcut -->
<activity
- name="Popup UI"
- description="Popup UI"
+ name="%activity.name.2"
+ description="%activity.description"
id="org.tizen.web.launch.DisablePopupMenu">
<enabledWhen>
<with variable="activeWorkbenchWindow.activePerspective">
<and>
<not>
- <equals value="org.tizen.web.ui.perspective.WACwidget"/>
+ <equals value="org.tizen.web.ui.perspective.WebWidget"/>
</not>
<not>
<equals value="org.tizen.nativeapp.perspective"/>
</not>
+ <not>
+ <equals value="org.tizen.webguibuilder.BuilderPerspective"/>
+ </not>
</and>
</with>
</enabledWhen>
@@ -57,25 +76,28 @@
point="org.eclipse.ui.activities">
<!-- disable CDT launch ui -->
<category
- name="CDT launch UI"
- description="Disable CDT launch UI when Native App Perspective is activated."
+ name="%category.name.0"
+ description="%category.description"
id="org.tizen.nativeapp.CDTLaunchUICategory">
</category>
<activity
- name="CDT Launch UI Elements"
- description="Launch UI elements from CDT"
+ name="%activity.name.3"
+ description="%activity.description.0"
id="org.tizen.nativeapp.DisableCDTLaunchUIActivity">
<enabledWhen>
<with variable="activeWorkbenchWindow.activePerspective">
<and>
<not>
- <equals value="org.tizen.web.ui.perspective.WACwidget"/>
+ <equals value="org.tizen.web.ui.perspective.WebWidget"/>
</not>
<not>
<equals value="org.tizen.nativeapp.perspective"/>
</not>
+ <not>
+ <equals value="org.tizen.webguibuilder.BuilderPerspective"/>
+ </not>
</and>
</with>
</enabledWhen>
@@ -103,23 +125,26 @@
<!-- disable CDT toolchain editor page -->
<category
- description="Disable CDT Toolchain Editor Page when Tizen Perspective is activated."
+ description="%category.description.0"
id="org.tizen.nativeapp.CDTToolChainEditorPageCategory"
- name="CDT ToolChain Editor Page">
+ name="%category.name.1">
</category>
<activity
- description="ToolChain Editor Property Page"
+ description="%activity.description.1"
id="org.tizen.nativeapp.DisableCDTToolChainEditorPageActivity"
- name="CDT ToolChain Editor Page Elements">
+ name="%activity.name.4">
<enabledWhen>
<with variable="activeWorkbenchWindow.activePerspective">
<and>
<not>
- <equals value="org.tizen.web.ui.perspective.WACwidget"/>
+ <equals value="org.tizen.web.ui.perspective.WebWidget"/>
</not>
<not>
<equals value="org.tizen.nativeapp.perspective"/>
</not>
+ <not>
+ <equals value="org.tizen.webguibuilder.BuilderPerspective"/>
+ </not>
</and>
</with>
</enabledWhen>
@@ -166,28 +191,27 @@
<activity
- name="Wizard UI"
- description="Wizard UI"
+ name="%activity.name.5"
+ description="%activity.description.2"
id="org.tizen.web.DisableWizardsActivity">
<enabledWhen>
<with variable="activeWorkbenchWindow.activePerspective">
<and>
<not>
- <equals value="org.tizen.web.ui.perspective.WACwidget"/>
+ <equals value="org.tizen.web.ui.perspective.WebWidget"/>
</not>
<not>
<equals value="org.tizen.nativeapp.perspective"/>
</not>
+ <not>
+ <equals value="org.tizen.webguibuilder.BuilderPerspective"/>
+ </not>
</and>
</with>
</enabledWhen>
</activity>
<activityPatternBinding
activityId="org.tizen.web.DisableWizardsActivity"
- pattern="com\.samsung\.tizen\.guibuilder/com\.samsung\.tizen\.guibuilder\.wizard\.newSgmWizard">
- </activityPatternBinding>
- <activityPatternBinding
- activityId="org.tizen.web.DisableWizardsActivity"
pattern="org\.eclipse\.jdt\.ui/org\.eclipse\.jdt\.ui\.wizards\.JavaProjectWizard">
</activityPatternBinding>
<activityPatternBinding
@@ -270,10 +294,11 @@
activityId="org.tizen.web.DisableWizardsActivity"
pattern="org\.eclipse\.wst\.dtd\.ui/org\.eclipse\.wst\.dtd\.ui\.internal\.wizard\.NewDTDWizard">
</activityPatternBinding>
- <activityPatternBinding
+ <!-- JSON File Wizard -->
+ <!-- activityPatternBinding
activityId="org.tizen.web.DisableWizardsActivity"
pattern="json\.editor\.plugin/Json\.newFileWizard">
- </activityPatternBinding>
+ </activityPatternBinding-->
<activityPatternBinding
activityId="org.tizen.web.DisableWizardsActivity"
pattern="org\.eclipse\.wst\.xml\.ui/org\.eclipse\.wst\.xml\.ui\.internal\.wizards\.NewXMLWizard">
@@ -288,18 +313,26 @@
point="org.eclipse.ui.activities">
<!-- PopupMenus Enabled when tizen Web IDE perspective -->
<activity
- description="PopupMenus"
+ description="%activity.description.3"
id="org.tizen.web.PopupMenusActivity"
- name="PopupMenus">
+ name="%activity.name.6">
<enabledWhen>
+ <and>
<with
variable="activeWorkbenchWindow.activePerspective">
<and>
<equals
- value="org.tizen.web.ui.perspective.WACwidget">
+ value="org.tizen.web.ui.perspective.WebWidget">
</equals>
</and>
</with>
+ <with variable="selection">
+ <iterate ifEmpty="false">
+ <test property="org.eclipse.core.resources.projectNature"
+ value="org.tizen.web.project.builder.WebNature" />
+ </iterate>
+ </with>
+ </and>
</enabledWhen>
</activity>
<activityPatternBinding
@@ -311,5 +344,19 @@
pattern="org.tizen.web.localization/org.tizen.web.localization.menus.popup.localizationMenu">
</activityPatternBinding>
</extension>
+ <extension
+ point="org.eclipse.ui.importWizards">
+ <category
+ id="org.tizen.nativeapp.importCategory"
+ name="%category.name.2">
+ </category>
+ </extension>
+ <extension
+ point="org.eclipse.ui.exportWizards">
+ <category
+ id="org.tizen.nativeapp.exportCategory"
+ name="%category.name.3">
+ </category>
+ </extension>
<!-- activities end -->
</plugin>
diff --git a/org.tizen.common/schema/org.tizen.common.prompter.exsd b/org.tizen.common/schema/org.tizen.common.prompter.exsd
new file mode 100644
index 000000000..cb67108a1
--- /dev/null
+++ b/org.tizen.common/schema/org.tizen.common.prompter.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.tizen.common" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.tizen.common" id="org.tizen.common.prompter" name="Prompter"/>
+ </appinfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <choice minOccurs="1" maxOccurs="unbounded">
+ <element ref="prompter"/>
+ </choice>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="prompter">
+ <complexType>
+ <attribute name="scope" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.tizen.common.core.command.Prompter"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/org.tizen.common/sdblib.jar b/org.tizen.common/sdblib.jar
deleted file mode 100644
index 28a8a0434..000000000
--- a/org.tizen.common/sdblib.jar
+++ /dev/null
Binary files differ
diff --git a/org.tizen.common/src/org/tizen/common/Adaptable.java b/org.tizen.common/src/org/tizen/common/Adaptable.java
new file mode 100644
index 000000000..8fb893549
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/Adaptable.java
@@ -0,0 +1,49 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+/**
+ * <p>
+ * Adaptable.
+ *
+ * Class for adapter pattern
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+Adaptable
+{
+ /**
+ * Adapt to new type interface or class
+ *
+ * @param <T> new type
+ * @param clazz new type class
+ *
+ * @return object to adapt to
+ */
+ public <T> T adapt( Class<T> clazz );
+}
diff --git a/org.tizen.common/src/org/tizen/common/AppIdGenerator.java b/org.tizen.common/src/org/tizen/common/AppIdGenerator.java
new file mode 100644
index 000000000..1712b04e9
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/AppIdGenerator.java
@@ -0,0 +1,127 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Changhyun Lee <changhyun1.lee@samsung.com>
+ * Hyeongseok Heo <hyeongseok.heo@samsung.com>
+ * BonYong Lee <bonyong.lee@samsung.com>
+ * Kangho Kim <kh5325.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+package org.tizen.common;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * Appid generator.
+ * It is consist of 0-9, a-z
+ */
+public class AppIdGenerator {
+ final char[] PSEUDO_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
+ 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
+ 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
+ 'y', 'z' };
+
+ final BigInteger PSEUDO_CHAR_SIZE = new BigInteger("62");
+
+ // Reserved AppID (or prefix)
+ static final String RESERVED_APPID [] = {
+ "TIZEN",
+ "PRIVT",
+ "WIDGT"
+ };
+ // Number of reserved AppID
+ static final int RESERVED_APPID_NUMBER = 3;
+
+ private String convertBytesToAlphaNumeric(byte in[], int size) {
+ BigInteger randomBigInt = new BigInteger(in).abs();
+ StringBuffer out = new StringBuffer(size + 1);
+
+ for (int i = 0; i < size; ++i) {
+ BigInteger[] dividedAndremainder = randomBigInt.divideAndRemainder(PSEUDO_CHAR_SIZE);
+ randomBigInt = dividedAndremainder[0];
+ out.append(PSEUDO_CHARS[dividedAndremainder[1].intValue()]);
+ }
+
+ String ret = new String(out);
+ return ret;
+ }
+
+ private byte[] generateRandomBytes(int size) throws Exception {
+ SecureRandom random = new SecureRandom();
+ KeyGenerator keyGen = KeyGenerator.getInstance("AES");
+ keyGen.init(128);
+
+ byte[] bytes = new byte[size];
+ random.nextBytes(bytes);
+
+ SecretKey secretkey = keyGen.generateKey();
+ byte[] key = secretkey.getEncoded();
+ SecretKeySpec secretkeySpec = new SecretKeySpec(key, "AES");
+
+ Cipher cipher = Cipher.getInstance("AES");
+ cipher.init(Cipher.ENCRYPT_MODE, secretkeySpec);
+
+ return cipher.doFinal(bytes);
+ }
+
+ private boolean check(String appId) {
+ for (int i = 0; i < RESERVED_APPID_NUMBER; ++ i) {
+ if (appId.indexOf(RESERVED_APPID[i]) == 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Generate an id of length n.
+ *
+ * @param size id length
+ * @return id
+ */
+ public String generate(int size) throws Exception {
+ String appId = "";
+ do {
+ appId = convertBytesToAlphaNumeric(generateRandomBytes(size), size);
+ } while (!check(appId));
+
+ return appId;
+ }
+
+ /**
+ * Generate an id of length 10.
+ *
+ * @return id
+ */
+ public String generate() throws Exception {
+ return generate(10);
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/Cabinet.java b/org.tizen.common/src/org/tizen/common/Cabinet.java
new file mode 100755
index 000000000..5ed46d02c
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/Cabinet.java
@@ -0,0 +1,10 @@
+package org.tizen.common;
+
+public interface
+Cabinet<T>
+extends Runnable
+{
+ public T getData();
+
+ public void setData( T data );
+}
diff --git a/org.tizen.common/src/org/tizen/common/CommonPlugin.java b/org.tizen.common/src/org/tizen/common/CommonPlugin.java
index b337172d8..736d1d7d5 100644
--- a/org.tizen.common/src/org/tizen/common/CommonPlugin.java
+++ b/org.tizen.common/src/org/tizen/common/CommonPlugin.java
@@ -3,10 +3,10 @@
*
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
-* Contact:
+* Contact:
* Changhyun Lee <changhyun1.lee@samsung.com>
* Kangho Kim <kh5325.kim@samsung.com>
-*
+*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -25,16 +25,21 @@
*/
package org.tizen.common;
-import java.io.File;
-
+import org.apache.log4j.spi.RepositorySelector;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
-import org.tizen.common.preferences.TizenBasePreferencePage;
-import org.tizen.common.properties.InstallPathConfig;
+import org.tizen.common.core.application.InstallPathConfig;
+import org.tizen.common.core.command.EclipseExecutor;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.core.command.Prompter;
+import org.tizen.common.core.command.prompter.EclipsePrompter;
+import org.tizen.common.core.command.prompter.SWTPrompter;
+import org.tizen.common.ui.page.preference.TizenBasePreferencePage;
+import org.tizen.common.util.DialogUtil;
import org.tizen.common.util.HostUtil;
import org.tizen.common.util.OSChecker;
-
+import org.tizen.common.util.log.Logger;
import org.tizen.sdblib.SmartDevelopmentBridge;
/**
@@ -45,36 +50,69 @@ public class CommonPlugin extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "org.tizen.common"; //$NON-NLS-1$
- private final static String SDKSUFFIX = File.separatorChar+".TizenSDK"+File.separatorChar+"tizensdkpath";
// The shared instance
private static CommonPlugin plugin;
-
+
/**
- * The constructor
+ * {@link Prompter} using swt dialog
*/
- public CommonPlugin() {
- SmartDevelopmentBridge.init();
- String sdbPath = InstallPathConfig.getSDKPath() + File.separator + "SDK" + File.separator +"sdb" + File.separator + "sdb";
- SmartDevelopmentBridge.createBridge(sdbPath, true);
- }
+ protected EclipsePrompter prompter = null;
+
+ /**
+ * {@link Executor} with {@link SWTPrompter}
+ */
+ protected Executor executor = null;
+
+ protected RepositorySelector selector = null;
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
+ @Override
public void start(BundleContext context) throws Exception {
- super.start(context);
+ super.start( context );
plugin = this;
+ initializeExecutor();
+
+ String sdbPath = InstallPathConfig.getSDBPath();
+ if (!HostUtil.exists(sdbPath)) {
+ DialogUtil.openMessageDialog("There is no " + sdbPath + ".");
+ }
+ else {
+ try {
+ SmartDevelopmentBridge.init();
+ SmartDevelopmentBridge.createBridge(sdbPath, true);
+ } catch (Throwable t) {
+ Logger.error("Problem occurred while initializing sdb", t.getMessage(), t);
+ DialogUtil.openErrorDialog("Failed to start sdb");
+ }
+ }
+
+ if (OSChecker.isWindows()) {
+ String dllPath = InstallPathConfig.getSdbWinUsbApiPath();
+ if (!HostUtil.exists(dllPath))
+ DialogUtil.openMessageDialog("There is no " + dllPath + ".\n" +
+ "It's not mandatory but you may have problem in using sdb through USB.");
+ }
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
+ @Override
public void stop(BundleContext context) throws Exception {
+ finalizeExecutor();
plugin = null;
super.stop(context);
}
+
+
+ public static void setDefault( CommonPlugin plugin )
+ {
+ CommonPlugin.plugin = plugin;
+ }
/**
* Returns the shared instance
@@ -84,39 +122,56 @@ public class CommonPlugin extends AbstractUIPlugin {
public static CommonPlugin getDefault() {
return plugin;
}
-
- @Override
- protected void initializeDefaultPreferences(IPreferenceStore store) {
- if (loadSdkPath() != null)
- store.setDefault(TizenBasePreferencePage.KEY_SDKLOCATION,loadSdkPath());
- store.setDefault(TizenBasePreferencePage.KEY_SDKUPDATE,TizenBasePreferencePage.VALUE_SDKUPDATE_DEFAULT);
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences(org.eclipse.jface.preference.IPreferenceStore)
+ */
+ @Override
+ protected void initializeDefaultPreferences( final IPreferenceStore store ) {
+ if (InstallPathConfig.getSDKPath() != null)
+ store.setDefault(TizenBasePreferencePage.KEY_SDKLOCATION, InstallPathConfig.getSDKPath());
+ store.setDefault(TizenBasePreferencePage.KEY_SDKUPDATE, TizenBasePreferencePage.VALUE_SDKUPDATE_DEFAULT);
+ }
- }
+ /**
+ * Set {@link Executor} in eclipse plugin environment
+ *
+ * @param executor {@link Executor}
+ */
+ public void setExecutor( final Executor executor )
+ {
+ this.executor = executor;
+ }
+
+ /**
+ * Return {@link Executor} in eclipse plugin environment
+ * @return
+ */
+ public Executor getExecutor()
+ {
+ return this.executor;
+ }
+
+ /**
+ * Return {@link Prompter} in eclipse plugin environment
+ *
+ * @return {@link Prompter}
+ */
+ public Prompter getPrompter()
+ {
+ return this.prompter;
+ }
-
- /**
- * get sdk path
- */
- private String loadSdkPath() {
- String sdkConfig;
- String sdkPath = null;;
- if (OSChecker.isWindows())
- sdkConfig = System.getenv("localappdata") + File.separatorChar + SDKSUFFIX;
- else
- sdkConfig= System.getProperty("user.home") + File.separatorChar + SDKSUFFIX;
+ protected void initializeExecutor()
+ {
+ this.prompter = new EclipsePrompter( new SWTPrompter() );
+
+ this.executor = new EclipseExecutor( prompter );
+ }
- if (HostUtil.exists(sdkConfig)) {
- String contents = HostUtil.getContents(sdkConfig);
- if (contents != null) {
- String[] fileContent = contents.split("=");
- if (fileContent.length == 2) {
- if (HostUtil.exists(fileContent[1]))
- sdkPath = fileContent[1];
- }
- }
- }
- return sdkPath;
- }
+ protected void finalizeExecutor()
+ {
+
+ }
}
diff --git a/org.tizen.common/src/org/tizen/common/model/DefaultTableModel.java b/org.tizen.common/src/org/tizen/common/Factory.java
index d50073748..b5dcc5784 100644
--- a/org.tizen.common/src/org/tizen/common/model/DefaultTableModel.java
+++ b/org.tizen.common/src/org/tizen/common/Factory.java
@@ -1,43 +1,45 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-
-public class DefaultTableModel extends AbstractTableModel {
-
- public DefaultTableModel(AbstractTableVO source) {
- super(source);
- }
-
- public String getSourceName() {
- String str = this.source.getClass().getSimpleName();
- if(str.endsWith("VO")) //$NON-NLS-1$
- str = str.substring(0,str.length()-2);
- return str;
- }
-}
-
-
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5325.kim@samsung.com>
+* Hyeongseok Heo <hyeongseok.heo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+* Gyeongseok Seo <gyeongseok.seo@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common;
+
+/**
+ * Factory Interface that are using when create new object by Factory pattern
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ * @author Gyeongseok Seo <gyeongseok.seo@samsung.com>
+ */
+public interface Factory<T>
+{
+ /**
+ * create object
+ *
+ * @return created <code>T</code> object
+ */
+ T create();
+}
diff --git a/org.tizen.common/src/org/tizen/common/control/TableViewContentProvider.java b/org.tizen.common/src/org/tizen/common/FactoryWithArgument.java
index 2d9038cac..864e92ff2 100644
--- a/org.tizen.common/src/org/tizen/common/control/TableViewContentProvider.java
+++ b/org.tizen.common/src/org/tizen/common/FactoryWithArgument.java
@@ -1,50 +1,45 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.control;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.tizen.common.model.ITableModel;
-
-
-public class TableViewContentProvider implements IStructuredContentProvider {
-
- public TableViewContentProvider() {
- }
-
- public Object[] getElements(Object model) {
- return ((ITableModel)model).getDatas();
- }
-
- public void dispose() {
-
- }
-
- public void inputChanged(Viewer viewer, Object obj, Object obj1) {
-
- }
-
-}
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5325.kim@samsung.com>
+* Hyeongseok Heo <hyeongseok.heo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+* Gyeongseok Seo <gyeongseok.seo@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common;
+
+/**
+ * Factory Interface that are using when create new object with argument by Factory pattern
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ * @author Gyeongseok Seo <gyeongseok.seo@samsung.com>
+ */
+public interface FactoryWithArgument<T, A> {
+ /**
+ * create object
+ *
+ * @param arg argument of an object to be created
+ * @return created <code>T</code> object
+ */
+ T create( A arg );
+}
diff --git a/org.tizen.common/src/org/tizen/common/IApplicationConfiguration.java b/org.tizen.common/src/org/tizen/common/IApplicationConfiguration.java
new file mode 100755
index 000000000..325223de2
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/IApplicationConfiguration.java
@@ -0,0 +1,39 @@
+/*
+ * Common
+ *
+ * Copyright (C) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Jihoon Song <jihoon80.song@samsung.com>
+ * Kangho Kim <kh5325.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+/**
+ * IApplicationConfiguration Interface that is used when getting project's build configurations.
+ *
+ * @author Kangho Kim{@literal <kh5325.kim@samsung.com>} (S-Core)
+ * @author Yoonki Park <yoonki.park@samsung.com>
+ */
+public interface IApplicationConfiguration {
+ public String getDefaultConfiguration();
+ public String getBinaryName();
+ public String generateAppId();
+ public TizenProjectType getTizenProjectType();
+}
diff --git a/org.tizen.common/src/org/tizen/common/Surrogate.java b/org.tizen.common/src/org/tizen/common/Surrogate.java
new file mode 100644
index 000000000..c752d78e6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/Surrogate.java
@@ -0,0 +1,44 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5325.kim@samsung.com>
+* Hyeongseok Heo <hyeongseok.heo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+* Gyeongseok Seo <gyeongseok.seo@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common;
+
+/**
+ * Surrogate Interface that are using when dependency object is injected by surrogate pattern
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ * @author Gyeongseok Seo <gyeongseok.seo@samsung.com>
+ */
+public interface Surrogate<T> {
+ /**
+ * pass adapted object
+ *
+ * @return adapted <code>T</code> object
+ */
+ T getAdapter();
+}
diff --git a/org.tizen.common/src/org/tizen/common/control/TreeViewLabelProvider.java b/org.tizen.common/src/org/tizen/common/SurrogateWithArgument.java
index 77bb41387..d6b704db5 100644
--- a/org.tizen.common/src/org/tizen/common/control/TreeViewLabelProvider.java
+++ b/org.tizen.common/src/org/tizen/common/SurrogateWithArgument.java
@@ -1,32 +1,42 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.control;
-
-import org.eclipse.jface.viewers.LabelProvider;
-
-public class TreeViewLabelProvider extends LabelProvider {
-
-}
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common;
+
+/**
+ * Surrogate Interface that are using when dependency object is injected by surrogate pattern
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface SurrogateWithArgument<T, A>
+{
+ /**
+ * pass adapted object using argument
+ *
+ * @param arg argument of an object to be created
+ *
+ * @return adapted <code>T</code> object
+ */
+ T getAdapter( A arg );
+}
diff --git a/org.tizen.common/src/org/tizen/common/TizenHelpContextIds.java b/org.tizen.common/src/org/tizen/common/TizenHelpContextIds.java
new file mode 100644
index 000000000..c543ddcc8
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/TizenHelpContextIds.java
@@ -0,0 +1,49 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Changhyun Lee <changhyun1.lee@samsung.com>
+* Kangho Kim <kh5325.kim@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common;
+
+public class TizenHelpContextIds
+{
+ public static final String HELP_COMMON_CONNECTION_EXPLORER_CONTEXT = "org.tizen.ide.common.connection_explorer_context";
+ public static final String HELP_COMMON_LOG_CONTEXT = "org.tizen.ide.common.log_context";
+
+ public static final String HELP_NATIVE_CODECOVERAGE_CONTEXT = "org.tizen.ide.native.codecoverage_context";
+ public static final String HELP_NATIVE_UNITTEST_CONTEXT = "org.tizen.ide.native.unittest_context";
+ public static final String HELP_NATIVE_MANIFEST_CONTEXT = "org.tizen.ide.native.manifest_context";
+ public static final String HELP_NATIVE_PROJECT_WIZARD_CONTEXT = "org.tizen.ide.native.project_wizard_context";
+
+ public static final String HELP_WEB_WIDGET_CONFIGURATION_EDITOR_CONTEXT = "org.tizen.ide.web.widget_configuration_editor_context";
+ public static final String HELP_WEB_HTML_EDITOR_CONTEXT = "org.tizen.ide.web.html_editor_context";
+ public static final String HELP_WEB_JAVASCRIPT_EDITOR_CONTEXT = "org.tizen.ide.web.javascript_editor_context";
+ public static final String HELP_WEB_CSS_EDITOR_CONTEXT = "org.tizen.ide.web.css_editor_context";
+ public static final String HELP_WEB_HTML_PREVIEW_CONTEXT = "org.tizen.ide.web.html_preview_context";
+ public static final String HELP_WEB_CSS_PREVIEW_CONTEXT = "org.tizen.ide.web.css_preview_context";
+ public static final String HELP_WEB_PREFERENCES_CONTEXT = "org.tizen.ide.web.preferences_context";
+ public static final String HELP_WEB_SIMULATOR_PREFERENCES_CONTEXT = "org.tizen.ide.web.simulator_preferences_context";
+ public static final String HELP_WEB_NEW_PROJECT_WIZARD_CONTEXT = "org.tizen.ide.web.new_project_wizard_context";
+ public static final String HELP_WEB_USER_TEMPLATE_CONTEXT = "org.tizen.ide.web.user_template_context";
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/TizenPlatformConstants.java b/org.tizen.common/src/org/tizen/common/TizenPlatformConstants.java
new file mode 100644
index 000000000..2463a9822
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/TizenPlatformConstants.java
@@ -0,0 +1,80 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5325.kim@samsung.com>
+* Hyunsik Noh <hyunsik.noh@samsung.com>
+* Yoonki Park <yoonki.park@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common;
+
+import org.tizen.common.util.OSChecker;
+
+/**
+ * All constant definitions related Tizen Platform such as Emulator or Device.
+ * @author Kangho Kim {@literal <kh5325.kim@samsung.com>} (S-Core)
+ */
+public class TizenPlatformConstants {
+ // Definitions for common
+ public static final String LOCALHOST = "127.0.0.1";
+ public static final String ENVIRONMENT_SETTING_CMD = "export ";
+ public static final String CMD_RESULT_CHECK = "; echo $?;";
+ public static final String CMD_RESULT_PREFIX = "cmd_ret:";
+ public static final String CMD_SUFFIX = "; echo "+CMD_RESULT_PREFIX+"$?;";
+ public static final String CMD_SUCCESS = CMD_RESULT_PREFIX+"0";
+ public static final String CMD_FAILURE = CMD_RESULT_PREFIX+"1";
+
+ public static final int OS = OSChecker.LINUX;
+
+ // Definitions for building
+
+ // Definitions for packaging
+ public static final String PACKAGENAME_PREFIX = "org.tizen";
+ public static final String DEBIAN_INSTALL_PATH = "opt/*";
+
+ // Definitions for debugging
+ public static final String PUBICL_PLATFORM_CORE_PATH = "/opt/bs/core";
+ public static final String PRIVATE_PLATFORM_CORE_PATH = "/opt/share/hidden_storage/SLP_debug";
+ public static final String GDBSERVER_CMD = TizenPlatformConstants.TOOLS_TARGET_PATH + "/gdbserver/gdbserver";
+ public static final String GDBSERVER_PLATFORM_CMD = TizenPlatformConstants.TOOLS_TARGET_PATH + "/gdbserver-platform/gdbserver";
+ public static final String ATTACH_OPTION = " --attach ";
+
+ // Definitions for installing
+ public static final String APP_INSTALL_PATH = "/opt/apps";
+ public static final String TEMPORARY_PKG_PATH = "/opt/apps/PKGS/";
+ public static final String PKG_TOOL_LIST_COMMAND = "pkgcmd -l | grep %s";
+ public static final String PKG_TOOL_REMOVE_COMMAND = "pkgcmd -q -u -t %s -n %s";
+ public static final String PKG_TOOL_INSTALL_COMMAND = "pkgcmd -q -i -t %s -p %s";
+
+ // Definitions for launching
+ public static final String LAUNCH_CMD = "launch_app %s";
+ public static final String LAUNCH_CMD_SUCCESS = "... successfully launched";
+ public static final String LAUNCH_CMD_FAILURE = "... launch failed";
+ public static final String ELM_SCALE_GETTER = "/home/developer/sdk_tools/elm_scale_getter/get_elm_scale ";//FIXME : have to be removed
+
+ // Definitions for ondemand install
+ public static final String CONTROL_EXTENSION = ".control";
+ public static final String TOOLS_TARGET_PATH = "/home/developer/sdk_tools";
+
+ // Definitions for others
+ public static final String CODE_COVERAGE_BUILD_OPTION = "-fprofile-arcs -ftest-coverage";
+ public static final String CODE_COVERAGE_LAUNCH_OPTION = " __AUL_SDK__ CODE_COVERAGE";
+}
diff --git a/org.tizen.common/src/org/tizen/common/TizenProjectType.java b/org.tizen.common/src/org/tizen/common/TizenProjectType.java
new file mode 100644
index 000000000..126151ba8
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/TizenProjectType.java
@@ -0,0 +1,41 @@
+/*
+* TizenProjectType.java
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5225.kim@samsung.com>
+* Gun Kim <gune.kim@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common;
+
+/**
+ * Represents that TIZEN supports the given project types.
+ */
+public enum TizenProjectType {
+ TIZEN_C_UI_APPLICATION,
+ TIZEN_C_SERVICE_APPLICATION,
+ TIZEN_C_SHAREDLIBRARY,
+ TIZEN_C_STATICLIBRARY,
+ TIZEN_CPP_UI_APPLICATION,
+ TIZEN_CPP_SERVICE_APPLICATION,
+ TIZEN_CPP_SHAREDLIBRARY,
+ TIZEN_CPP_STATICLIBRARY,
+ TIZEN_PLATFORM_PROJECT;
+}
diff --git a/org.tizen.common/src/org/tizen/common/cache/ImageCache.java b/org.tizen.common/src/org/tizen/common/cache/ImageCache.java
deleted file mode 100644
index 639a79723..000000000
--- a/org.tizen.common/src/org/tizen/common/cache/ImageCache.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Changhyun Lee <changhyun1.lee@samsung.com>
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-package org.tizen.common.cache;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * Class for caching images
- *
- * @author Emil
- */
-public class ImageCache {
-
- private static HashMap<String, Image> _ImageMap;
-
- // what path to get to the "icons" directory without actually including it
- private static final String ICON_ROOT_PATH = "icons/";
-
- static {
- _ImageMap = new HashMap<String, Image>();
- }
-
- /**
- * Returns an image that is also cached if it has to be created and does not already exist in the cache.
- *
- * @param fileName Filename of image to fetch
- * @return Image null if it could not be found
- */
- public static Image getImage(String fileName) {
- fileName = ICON_ROOT_PATH + fileName;
- Image image = _ImageMap.get(fileName);
- if (image == null) {
- image = createImage(fileName);
- _ImageMap.put(fileName, image);
- }
- return image;
- }
-
- // creates the image, and tries really hard to do so
- private static Image createImage(String fileName) {
- ClassLoader classLoader = ImageCache.class.getClassLoader();
- InputStream is = classLoader.getResourceAsStream(fileName);
- if (is == null) {
- // the old way didn't have leading slash, so if we can't find the image stream,
- // let's see if the old way works.
- is = classLoader.getResourceAsStream(fileName.substring(1));
-
- if (is == null) {
- is = classLoader.getResourceAsStream(fileName);
- if (is == null) {
- is = classLoader.getResourceAsStream(fileName.substring(1));
- if (is == null) { return null; }
- }
- }
- }
-
- Image img = new Image(Display.getDefault(), is);
- try {
- is.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return img;
- }
-
- /**
- * Disposes ALL images that have been cached.
- */
- public static void dispose() {
- Iterator<Image> e = _ImageMap.values().iterator();
- while (e.hasNext())
- e.next().dispose();
-
- }
-}
diff --git a/org.tizen.common/src/org/tizen/common/control/TableViewCellModifier.java b/org.tizen.common/src/org/tizen/common/control/TableViewCellModifier.java
deleted file mode 100644
index 6bbc54ede..000000000
--- a/org.tizen.common/src/org/tizen/common/control/TableViewCellModifier.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.control;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.ComboBoxCellEditor;
-import org.eclipse.jface.viewers.ICellModifier;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.tizen.common.model.ITableVO;
-
-
-/**
- * This class implements an ICellModifier
- * An ICellModifier is called when the user modifes a cell in the
- * tableViewer
- */
-
-public class TableViewCellModifier implements ICellModifier {
- private TableViewer viewer;
- private String[] columnNames;
- CellEditor[] cellEditors;
- /**
- * Constructor
- * @param TableViewerExample an instance of a TableViewerExample
- */
- public TableViewCellModifier(TableViewer viewer) {
- super();
- this.viewer = viewer;
- this.columnNames = getColumnNames();
- this.viewer.setColumnProperties(columnNames);
- }
-
- private String[] getColumnNames() {
- TableColumn[] columns = viewer.getTable().getColumns();
- String[] columnNames = new String[columns.length];
- for(int i=0;i<columnNames.length;i++){
- columnNames[i] = columns[i].getText();
- }
-
- return columnNames;
- }
-
- /**
- * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String)
- */
- public boolean canModify(Object element, String property) {
- return true;
- }
-
- /**
- * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String)
- */
- public Object getValue(Object element, String property) {
-
- Object result = null;
- int idx = getColumnIndex(property);
- ITableVO vo = (ITableVO)element;
-
- CellEditor ce = getCellEditor(idx);
-
- if(ce instanceof ComboBoxCellEditor){
- result = vo.getColumnValue(idx);
- }else if(ce instanceof TextCellEditor){
- result = vo.getColumnValue(idx);
- }else{
- result = ""; //$NON-NLS-1$
- }
- return result;
- }
-
- private CellEditor getCellEditor(int idx) {
- if(this.cellEditors==null)
- this.cellEditors = viewer.getCellEditors();
- return this.cellEditors[idx];
- }
-
- private int getColumnIndex(String property) {
- for(int i=0;i<columnNames.length;i++){
- if(columnNames[i].equals(property))
- return i;
- }
- return 0;
- }
-
- private int getComboIndex(String[] items, Object str) {
- for(int i=0;i<items.length;i++){
- if(items[i].equals(str))
- return i;
- }
- return 0;
- }
-
- /**
- * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object)
- */
- public void modify(Object element, String property, Object value) {
- int idx = getColumnIndex(property);
- ITableVO vo = (ITableVO)((TableItem) element).getData();
-
- if(cellEditors[idx] instanceof ComboBoxCellEditor){
- if((Integer)value < 0)
- return;
- else
- vo.setColumnValue(idx, value);
- }else if(cellEditors[idx] instanceof TextCellEditor){
- vo.setColumnValue(idx, value);
- }
-
- viewer.update(vo, null);
- }
-}
diff --git a/org.tizen.common/src/org/tizen/common/control/TableViewColumnSorter.java b/org.tizen.common/src/org/tizen/common/control/TableViewColumnSorter.java
deleted file mode 100644
index 1456f8928..000000000
--- a/org.tizen.common/src/org/tizen/common/control/TableViewColumnSorter.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.control;
-
-import java.util.Comparator;
-
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Cursor;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.tizen.common.model.ITableVO;
-
-
-
-
-/**
- * A viewer sorter is used by a structured viewer to reorder the elements
- * provided by its content provider. In addition, the TableViewColumnSorter
- * listens for mouse clicks in the column headers and resorts the table content
- * based on the column that was selected. Clicking on a column a second time
- * toggles the sort order.
- */
-public class TableViewColumnSorter extends ViewerSorter {
- private static final String COLUMN_INDEX_KEY = "COLUMN_INDEX"; //$NON-NLS-1$
- private static final String HEADER_TEXT_KEY = "HEADER_TEXT"; //$NON-NLS-1$
- private static final String TAG_DESCENDING = "\u25b2"; // up-pointing triangle
- private static final String TAG_ASCENDING = "\u25bc"; // down-pointing triangle
-
- private TableViewer viewer;
- private Table table;
- private TableColumn[] columns;
- Cursor waitCursor;
-
- private Comparator<String> stringComparator = new Comparator<String>(){
- @Override
- public int compare(String str1, String str2) {
- str1=str1==null?"":str1; //$NON-NLS-1$
- str2=str2==null?"":str2; //$NON-NLS-1$
- return str1.compareTo(str2);
- }
- };
-
- private Comparator<Integer> numberComparator = new Comparator<Integer>(){
- @Override
- public int compare(Integer num1, Integer num2) {
- return num1>num2?1:(num1==num2?0:-1);
- }
- };
-
- public TableViewColumnSorter(TableViewer viewer) {
- this.viewer = viewer;
- this.table = viewer.getTable();
- this.columns = viewer.getTable().getColumns();
-
- createCursor();
- createSelectionListener(columns);
- }
-
- private void createCursor(){
- waitCursor = Display.getCurrent().getSystemCursor(SWT.CURSOR_WAIT);
- }
-
- public int compare(Viewer viewer, Object object1, Object object2) {
- TableColumn column = table.getSortColumn();
-
- int index = -1;
- if(column==null){
- return 0;
- }else{
- index = (Integer)column.getData(COLUMN_INDEX_KEY);
- }
-
- Object target1 = ((ITableVO)object1).getColumnValue(index);
- Object target2 = ((ITableVO)object2).getColumnValue(index);
-
- int result = compare(target1, target2);
-
- if(table.getSortDirection()==SWT.UP)
- return result;
- else
- return -result;
- }
-
- public int compare(Object object1, Object object2){
- if(object1 instanceof Integer){
- return numberComparator.compare((Integer)object1, (Integer)object2);
- }else{
- return stringComparator.compare(object1.toString(), object2.toString());
- }
- }
-
- private void createSelectionListener(TableColumn[] columns) {
- for (int i = 0; i < columns.length; i++) {
- columns[i].setData(COLUMN_INDEX_KEY,i);
- columns[i].setData(HEADER_TEXT_KEY,columns[i].getText());
- columns[i].addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- TableColumn column = (TableColumn)e.getSource();
- clearColumnHeader(column);
- renderColumnHeader(column);
-
- table.setCursor(waitCursor);
- viewer.refresh();
- table.setCursor(null);
- }
- });
- }
- }
-
- private void renderColumnHeader(TableColumn column){
- int direction = table.getSortDirection()==SWT.UP?SWT.DOWN:SWT.UP;
- table.setSortDirection(direction);
- table.setSortColumn(column);
-
- String title = (String)column.getData(HEADER_TEXT_KEY);
- String directionShape = direction==SWT.UP?TAG_DESCENDING:TAG_ASCENDING;
- column.setText(title+" "+directionShape); //$NON-NLS-1$
- }
-
- private void clearColumnHeader(TableColumn column){
- TableColumn prevColumn = table.getSortColumn();
-
- if(prevColumn==null){
- return;
- }else{
- prevColumn.setText((String)prevColumn.getData(HEADER_TEXT_KEY));
- }
- }
-
-} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/control/TableViewLabelProvider.java b/org.tizen.common/src/org/tizen/common/control/TableViewLabelProvider.java
deleted file mode 100644
index 12bfa05cb..000000000
--- a/org.tizen.common/src/org/tizen/common/control/TableViewLabelProvider.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.control;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.ColumnLabelProvider;
-import org.eclipse.jface.viewers.ComboBoxCellEditor;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.graphics.Image;
-import org.tizen.common.model.ITableVO;
-
-
-
-
-
-public class TableViewLabelProvider extends ColumnLabelProvider implements ITableLabelProvider {
-
- public TableViewLabelProvider() {
- }
-
- private TableViewer viewer;
- CellEditor[] cellEditors;
-
- public TableViewLabelProvider(TableViewer viewer) {
- this.viewer = viewer;
- this.cellEditors = viewer.getCellEditors();
- }
-
- private Field[] fields;
-
- private int getColumnIndex(int columnIndex){
- return fields.length>columnIndex?columnIndex:fields.length;
- }
-
- public Image getColumnImage(Object element, int columnIndex) {
- return null;
- }
-
-// private void hasCellEditor(){
-// if(this.cellEditors==null)
-// this.cellEditors = viewer.getCellEditors();
-// }
-
- private CellEditor getCellEditor(int idx) {
- if(this.cellEditors==null)
- return null;
- else
- return this.cellEditors[idx];
- }
-
- public String getColumnText(Object element, int columnIndex) {
- Object obj = null;
-
- if(element instanceof ITableVO){
- ITableVO data = (ITableVO)element;
- if(this.cellEditors != null){
- CellEditor ce = getCellEditor(columnIndex);
- if(ce instanceof ComboBoxCellEditor){
- ComboBoxCellEditor editor = (ComboBoxCellEditor)ce;
- String items[] = editor.getItems();
- int idx = (Integer) data.getColumnValue(columnIndex);
- if(idx<0)
- obj = null;
- else if(idx>items.length)
- obj = items[0];
- else
- obj = items[idx];
- }else{
- obj = data.getColumnValue(columnIndex);
- }
- }else{
- obj = data.getColumnValue(columnIndex);
- }
- }else{
- if(fields==null)
- fields = element.getClass().getDeclaredFields();
-
- int idx = getColumnIndex(columnIndex);
- String fieldName = fields[idx].getName().substring(0, 1).toUpperCase()
- + fields[idx].getName().substring(1,fields[idx].getName().length());
-
- try{
- Method method = element.getClass().getMethod("get" + fieldName, new Class[] {}); //$NON-NLS-1$
- obj = method.invoke(element, new Object[] {});
- }catch(Exception e){
- return ""; //$NON-NLS-1$
- }
- }
-
- return obj==null?"":String.valueOf(obj); //$NON-NLS-1$
- }
-
-
-}
diff --git a/org.tizen.common/src/org/tizen/common/control/TreeViewContentProvider.java b/org.tizen.common/src/org/tizen/common/control/TreeViewContentProvider.java
deleted file mode 100644
index 726fb9390..000000000
--- a/org.tizen.common/src/org/tizen/common/control/TreeViewContentProvider.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.control;
-
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.tizen.common.model.ITreeModel;
-import org.tizen.common.model.ITreeVO;
-
-
-public class TreeViewContentProvider implements ITreeContentProvider {
-
- public Object[] getChildren(Object element) {
- if(element instanceof ITreeModel)
- return ((ITreeModel)element).getDatas();
- else
- return ((ITreeVO)element).getChildren();
- }
-
- public Object getParent(Object element) {
- if(element instanceof ITreeModel)
- return null;
- else
- return ((ITreeVO)element).getParent();
-
- }
-
- public boolean hasChildren(Object element) {
- if(element instanceof ITreeModel)
- return ((ITreeModel)element).size()>0;
- else
- return ((ITreeVO)element).hasChildren();
- }
-
- public Object[] getElements(Object inputElement) {
- return getChildren(inputElement);
- }
-
- public void dispose() {
- }
-
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
-
-
-}
diff --git a/org.tizen.common/src/org/tizen/common/core/application/InstallPathConfig.java b/org.tizen.common/src/org/tizen/common/core/application/InstallPathConfig.java
new file mode 100644
index 000000000..d0d268e50
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/application/InstallPathConfig.java
@@ -0,0 +1,212 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5325.kim@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.core.application;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.tizen.common.util.DialogUtil;
+import org.tizen.common.util.HostUtil;
+import org.tizen.common.util.OSChecker;
+
+
+
+final public class InstallPathConfig {
+
+ private static String defaultHomePath;
+ private static String sdkInstallPath;
+
+ private static final String DIR_PLATFORMS = "platforms";
+ private static final String DIR_PLATFORMS_VER = "tizen2.0";
+ private static final String DIR_SAMPLES = "samples";
+ private static final String DIR_SNIPPETS = "snippets";
+ private static final String DIR_ON_DEMAND = "on-demand";
+ private static final String DIR_EMULATOR = "emulator";
+ private static final String DIR_INSTALLER = "install-manager";
+ private static final String DIR_TOOLS = "tools";
+ private static final String DIR_LIBRARY = "library";
+ private static final String DIR_SDK_DATA = "tizen-sdk-data";
+
+ private final static String SDKSUFFIX = DIR_SDK_DATA + File.separatorChar + "tizensdkpath";
+
+ // Registry Key
+ private static final String REGISTRY_PATH_OF_SHELL_FOLDER = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
+ // public static final String REGISTRY_APP_DATA_OF_SHELL_FOLDER = "AppData";
+ private static final String REGISTRY_LOCAL_APP_DATA_OF_SHELL_FOLDER = "\"Local AppData\"";
+ // Value Column
+ private static final String REG_SZ = "REG_SZ";
+
+ static {
+ // FIXME : don't need the following lines if using environment variable
+ if (OSChecker.isWindows()) {
+ defaultHomePath = getRegistryValue(REGISTRY_PATH_OF_SHELL_FOLDER,REGISTRY_LOCAL_APP_DATA_OF_SHELL_FOLDER) ;
+ } else if (OSChecker.isLinux() == true || OSChecker.isUnix() == true || OSChecker.isMAC() == true) {
+ defaultHomePath = System.getProperty("user.home");
+ } else {
+ DialogUtil.openMessageDialog(System.getProperty("os.name") + " is not supported currently.");
+ System.exit(0);
+ }
+
+ loadSdkPath(defaultHomePath + File.separatorChar + SDKSUFFIX);
+ }
+
+ /**
+ * @deprecated Use {@link #getSDKPath()} instead.
+ */
+ @Deprecated
+ public static String getIDEPath() {
+ // FIXME : can't help but putting the code due to the Web IDE path , It has to be removed soon.
+ return System.getProperty("user.dir");
+ }
+
+ public static String getSDKPath() {
+ return sdkInstallPath;
+ }
+
+ //This is temporary code to get platform version path(only for one).
+ //TODO: Should change to return string array type for various platform version paths.
+ public static String getPlatformVersionPath()
+ {
+ String path = null;
+ String platformPath = getSDKPath() + File.separator + DIR_PLATFORMS;
+ File platforms = new File(platformPath);
+ if(platforms.isDirectory())
+ {
+ // platforms.listFiles[0] can cause undetermined result like platforms/tmp.ini/sample
+ path = platformPath + File.separator + DIR_PLATFORMS_VER;
+ }
+ return path;
+ }
+
+ //TODO: Should change to get string array type for various platform version paths.
+ public static String getSamplesPath()
+ {
+ return getPlatformVersionPath() + File.separator + DIR_SAMPLES;
+ }
+
+ //TODO: Should change to get string array type for various platform version paths.
+ public static String getSnippetsPath()
+ {
+ return getPlatformVersionPath() + File.separator + DIR_SNIPPETS;
+ }
+
+ //TODO: Should change to get string array type for various platform version paths.
+ public static String getOnDemandPath()
+ {
+ return getPlatformVersionPath() + File.separator + DIR_ON_DEMAND;
+ }
+
+ public static String getLibraryPath() {
+ return getSDKPath() + File.separator + DIR_LIBRARY;
+ }
+
+ private static String getToolsPath() {
+ return getSDKPath() + File.separator + DIR_TOOLS;
+ }
+
+ public static String getSDBPath() {
+ String toolsPath = getToolsPath();
+ if (OSChecker.isWindows())
+ return toolsPath + File.separator + "sdb.exe";
+ else
+ return toolsPath + File.separator + "sdb";
+ }
+
+ public static String getSdbWinUsbApiPath() {
+ return getToolsPath() + File.separator + "SdbWinUsbApi.dll";
+ }
+
+ public static String getInstallManagerPath() {
+ return getSDKPath() + File.separator + DIR_INSTALLER;
+ }
+
+ public static String getEmulatorPath() {
+ return getToolsPath() + File.separator + DIR_EMULATOR;
+ }
+
+ public static String getUserHomePath() {
+ return defaultHomePath;
+ }
+
+ public static String getUserDataPath() {
+ return getUserHomePath() + File.separator + DIR_SDK_DATA;
+ }
+
+ private static void loadSdkPath(String sdkPath) {
+ boolean status = true;
+ if (HostUtil.exists(sdkPath)) {
+ String[] fileContent = HostUtil.getContents(sdkPath).split("=");
+ if (HostUtil.exists(fileContent[1]))
+ sdkInstallPath = fileContent[1];
+ else {
+ status = false;
+ }
+ } else {
+ status = false;
+ }
+
+ if (!status) {
+ DialogUtil.openMessageDialog("Tizen SDK is not installed properly.");
+ System.exit(0);
+ }
+ }
+ private static String getRegistryValue(String node, String key) {
+ if (!OSChecker.isWindows())
+ return null;
+
+ BufferedReader br = null;
+ String value = "";
+
+ String query = "reg query " + "\"" + node + "\" /v " + key;
+ try {
+ Process process = Runtime.getRuntime().exec(query);
+ String encoding = System.getProperty("sun.jnu.encoding");
+ br = new BufferedReader(new InputStreamReader(process.getInputStream(), encoding));
+
+ String line = null;
+ while ((line = br.readLine()) != null) {
+ int index = line.indexOf(REG_SZ);
+ if (index >= 0) {
+ value = line.substring(index + REG_SZ.length()).trim();
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (br != null) {
+ try {
+ br.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return value;
+ }
+} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/core/application/Messages.java b/org.tizen.common/src/org/tizen/common/core/application/Messages.java
new file mode 100644
index 000000000..d0ec4ae2f
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/application/Messages.java
@@ -0,0 +1,19 @@
+package org.tizen.common.core.application;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS
+{
+ private static final String BUNDLE_NAME = Messages.class.getName(); //$NON-NLS-1$
+ public static String DIALOG_TITLE;
+ public static String ASK_FOR_UPDATE;
+
+ public static String FileExistDialogTitle;
+ public static String FileExistMsg;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages( BUNDLE_NAME, Messages.class );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/application/Messages.properties b/org.tizen.common/src/org/tizen/common/core/application/Messages.properties
new file mode 100644
index 000000000..d3158eb98
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/application/Messages.properties
@@ -0,0 +1,5 @@
+DIALOG_TITLE = Tizen SDK
+ASK_FOR_UPDATE = Tizen SDK updates are available. Do you want to install them now?
+
+FileExistDialogTitle=Existing resource
+FileExistMsg="{0}" already exists. Do you want to overwrite it?
diff --git a/org.tizen.common/src/org/tizen/common/core/application/StatusLineMessageManager.java b/org.tizen.common/src/org/tizen/common/core/application/StatusLineMessageManager.java
new file mode 100644
index 000000000..7d4fa259a
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/application/StatusLineMessageManager.java
@@ -0,0 +1,80 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Kangho Kim <kh5325.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.application;
+
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.ui.IViewPart;
+
+public class StatusLineMessageManager
+{
+
+ protected final IStatusLineManager manager;
+
+ /**
+ * Contructor with {@link IViewPart}
+ *
+ * @param part {@link IViewPart} to provide {@link IStatusLineManager}
+ */
+ public StatusLineMessageManager( final IViewPart part )
+ {
+ this( part.getViewSite().getActionBars().getStatusLineManager() );
+ }
+
+ /**
+ * Constructor with {@link IStatusLineManager}
+ *
+ * @param manager {@link IStatusLineManager} to manage status bar
+ */
+ public StatusLineMessageManager(
+ final IStatusLineManager manager
+ )
+ {
+ if ( null == manager )
+ { // Fast Fail
+ throw new NullPointerException();
+ }
+ this.manager = manager;
+ }
+
+ /**
+ * Add error message at status bar
+ *
+ * @param message message to print out
+ */
+ public void setErrorMessage( final String message )
+ {
+ manager.setErrorMessage( message );
+ }
+
+ /**
+ * Add message at status bar
+ *
+ * @param message message to print out
+ */
+ public void setMessage( final String message )
+ {
+ manager.setMessage( message );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/update/UpdateManager.java b/org.tizen.common/src/org/tizen/common/core/application/UpdateManager.java
index 1a171792a..0213b2790 100644..100755
--- a/org.tizen.common/src/org/tizen/common/update/UpdateManager.java
+++ b/org.tizen.common/src/org/tizen/common/core/application/UpdateManager.java
@@ -23,24 +23,24 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.update;
+package org.tizen.common.core.application;
+
+import static org.tizen.common.util.SWTUtil.syncExec;
import java.io.File;
-import java.util.ResourceBundle;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;
import org.tizen.common.CommonPlugin;
-import org.tizen.common.preferences.TizenBasePreferencePage;
-import org.tizen.common.properties.InstallPathConfig;
+import org.tizen.common.ui.page.preference.TizenBasePreferencePage;
import org.tizen.common.util.HostUtil;
import org.tizen.common.util.OSChecker;
+import org.tizen.common.util.SWTUtil;
public class UpdateManager implements IStartup {
@@ -48,49 +48,48 @@ public class UpdateManager implements IStartup {
private static final String EXECUTE_INSTALLER_COMMAND_FOR_WINDOWS = "InstManager.exe";
private static final String UPDATE_LIST_CHECK_COMMAND = "%s -checkPackageUpdate";
private static final String RESULT_VALUE_OF_UPDATABLE = "updatable";
- private static final String BUNDLE_NAME = UpdateManager.class.getPackage().getName() + ".UpdateMessages";//$NON-NLS-1$
-
- public static ResourceBundle resources = ResourceBundle.getBundle(BUNDLE_NAME);
final IWorkbench workbench = PlatformUI.getWorkbench();
@Override
public void earlyStartup() {
// Check installable package exist.
- IPreferenceStore prefStore = CommonPlugin.getDefault().getPreferenceStore();
+ final IPreferenceStore prefStore =
+ CommonPlugin.getDefault().getPreferenceStore();
- if(prefStore.getBoolean(TizenBasePreferencePage.KEY_SDKUPDATE))
- {
- boolean updatable = isExistUpdatablePackage();
- if(updatable) {
- if(askExecuteInstallerDlg()) {
- executeInstallManger();
- if (workbench != null) {
- final Display display = workbench.getDisplay();
- display.syncExec(new Runnable() {
- public void run() {
- if (!display.isDisposed())
- workbench.close();
- }
- });
- }
- }
- }
+ if ( !prefStore.getBoolean( TizenBasePreferencePage.KEY_SDKUPDATE ) )
+ { // User don't want to update at startup
+ return ;
}
+ if ( !isExistUpdatablePackage() )
+ { // Check updatable version
+ return ;
+ }
+ if( !askExecuteInstallerDlg() )
+ { // User don't want to update at this time
+ return ;
+ }
+
+ executeInstallManger();
+ syncExec( new Runnable() {
+ public void run() {
+ if (!workbench.getDisplay().isDisposed())
+ {
+ workbench.close();
+ }
+ }
+ });
}
- private boolean isExistUpdatablePackage() {
- String result = HostUtil.returnExecute(getUpdateCheckCmd(), InstallPathConfig.getInstallManagerPath());
- if(RESULT_VALUE_OF_UPDATABLE.equals(result))
- return true;
- return false;
+ private boolean isExistUpdatablePackage()
+ {
+ String result = HostUtil.returnExecute( getUpdateCheckCmd(), InstallPathConfig.getInstallManagerPath() );
+ return ( RESULT_VALUE_OF_UPDATABLE.equals( result ) );
}
private boolean askExecuteInstallerDlg() {
int ret = checkUpdate();
- if (ret == IDialogConstants.YES_ID)
- return true;
- return false;
+ return ( ret == IDialogConstants.YES_ID );
}
private void executeInstallManger() {
@@ -112,8 +111,11 @@ public class UpdateManager implements IStartup {
MessageDialog dialog = new MessageDialog(
PlatformUI.getWorkbench().getDisplay().getActiveShell(),
- resources.getString("message.dialogTitle"),
- null, resources.getString("message.askForUpdate"), MessageDialog.QUESTION, labels, 0);
+ Messages.DIALOG_TITLE,
+ null,
+ Messages.ASK_FOR_UPDATE,
+ MessageDialog.QUESTION,
+ labels, 0);
dialog.open();
if (dialog.getReturnCode() == SWT.DEFAULT) {
// A window close returns SWT.DEFAULT - mapped to a cancel
@@ -124,7 +126,8 @@ public class UpdateManager implements IStartup {
}
};
- PlatformUI.getWorkbench().getDisplay().syncExec(query);
+
+ SWTUtil.syncExec( query );
return result[0];
}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/AbstractCommand.java b/org.tizen.common/src/org/tizen/common/core/command/AbstractCommand.java
new file mode 100644
index 000000000..a083ddc14
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/AbstractCommand.java
@@ -0,0 +1,94 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * AbstractCommand.
+ *
+ * Abstract class for {@link Command}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+abstract public class
+AbstractCommand<T>
+implements Command<T> {
+
+ /**
+ * Logger for this instance ( it will be used by sub-class )
+ */
+ protected Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Name of the cancel operation)
+ */
+ public static final String COMMAND_CANCEL = "cancel";
+
+ /**
+ * Result after execution of command
+ */
+ protected T result;
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Command#execute(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ abstract public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception;
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Command#undo(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public void undo(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Command#getResult()
+ */
+ @Override
+ public
+ T
+ getResult()
+ {
+ return this.result;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/Command.java b/org.tizen.common/src/org/tizen/common/core/command/Command.java
new file mode 100644
index 000000000..c1b3f198e
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/Command.java
@@ -0,0 +1,69 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command;
+
+/**
+ * <p>
+ * Command.
+ *
+ * Behavior unit for functionality independing on environment( file system, ui, ... )
+ * </p>
+ *
+ * @param <T> Execution result type
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+Command<T>
+{
+ /**
+ * Execute unit functionality
+ *
+ * @param executor execution subject
+ * @param context execution context
+ *
+ * @throws Exception If Exception occur in execution
+ */
+ void run( Executor executor, ExecutionContext context ) throws Exception;
+
+ /**
+ * Execute undoing for execution if possible
+ *
+ * @param executor execution subject
+ * @param context execution context
+ *
+ * @throws Exception If Exception occur in undo
+ */
+ void undo( Executor executor, ExecutionContext context ) throws Exception;
+
+ /**
+ * Return execution result
+ *
+ * @return Execution result
+ */
+ T getResult();
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/CommandCancelException.java b/org.tizen.common/src/org/tizen/common/core/command/CommandCancelException.java
new file mode 100644
index 000000000..c4e2b5758
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/CommandCancelException.java
@@ -0,0 +1,45 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Ho Namkoong <ho.namkoong@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+package org.tizen.common.core.command;
+
+/**
+ * <p>
+ * CommandCancelException.
+ *
+ * This exception is thrown when run method of command is canceled by user operation.
+ * </p>
+ *
+ * @param <T> Execution result type
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ * @See Command
+ */
+
+public class CommandCancelException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/CompositeCommand.java b/org.tizen.common/src/org/tizen/common/core/command/CompositeCommand.java
new file mode 100644
index 000000000..4fdfba554
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/CompositeCommand.java
@@ -0,0 +1,103 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * <p>
+ * CompositeCommand.
+ *
+ * Command to execute multiple {@link Command}s
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+CompositeCommand
+extends AbstractCommand<Object>
+{
+
+ /**
+ * {@link Command}s to execute
+ */
+ @SuppressWarnings("rawtypes")
+ protected final ArrayList<Command> commands = new ArrayList<Command>();
+
+ /**
+ * Constructor with {@link Command}s
+ *
+ * @param commands {@link Command}s to execute
+ *
+ * @see #addCommand(Command...)
+ */
+ public
+ CompositeCommand(
+ final Command<?>... commands
+ )
+ {
+ addCommand( commands );
+ }
+
+ /**
+ * Add {@link Command} to {@link Command}s to execute
+ *
+ * @param commands
+ *
+ * @see #commands
+ */
+ public
+ void
+ addCommand(
+ final Command<?>... commands
+ )
+ {
+ if ( null != commands )
+ {
+ this.commands.addAll( Arrays.asList( commands ) );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Command#execute(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ for ( final Command<Object> command : this.commands )
+ {
+ command.run( executor, context );
+ }
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/EclipseExecutor.java b/org.tizen.common/src/org/tizen/common/core/command/EclipseExecutor.java
new file mode 100644
index 000000000..ff02a58d3
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/EclipseExecutor.java
@@ -0,0 +1,70 @@
+package org.tizen.common.core.command;
+
+import java.text.MessageFormat;
+
+import org.tizen.common.Factory;
+import org.tizen.common.core.command.policy.PolicyRegistry;
+import org.tizen.common.file.EclipseFileHandler;
+import org.tizen.common.file.FileHandler;
+
+public class
+EclipseExecutor
+extends Executor
+{
+ /**
+ * Contructor with prompter
+ *
+ * @param prompter {@link Prompter}
+ */
+ public
+ EclipseExecutor(
+ final Prompter prompter
+ )
+ {
+ super(
+ new Factory<ExecutionContext>() {
+
+ /**
+ * {@link FileHandler} for Command Line Interface
+ */
+ protected FileHandler fileHandler = new EclipseFileHandler();
+
+
+ /**
+ * <p>
+ * {@link PolicyRegistry} for Command Line Interface
+ * </p>
+ */
+ protected Factory<PolicyRegistry> factory = new PolicyRegistryFactory();
+
+ /**
+ * Create and return {@link PolicyRegistry}
+ *
+ * @return {@link PolicyRegistry} to be created
+ */
+ protected
+ PolicyRegistry
+ getRegistry()
+ {
+ return factory.create();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.ExecutionContextFactory#create()
+ */
+ @Override
+ public
+ ExecutionContext
+ create()
+ {
+ return new ExecutionContext(
+ getRegistry(),
+ prompter,
+ fileHandler
+ );
+ }
+
+ }
+ );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/ExecutionContext.java b/org.tizen.common/src/org/tizen/common/core/command/ExecutionContext.java
new file mode 100644
index 000000000..0d68c2cf4
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/ExecutionContext.java
@@ -0,0 +1,138 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import org.tizen.common.core.command.policy.PolicyRegistry;
+import org.tizen.common.file.FileHandler;
+
+/**
+ * <p>
+ * ExecutionContext.
+ *
+ * Context in execution of commands
+ *
+ * Container for objects in execution envitonment
+ *
+ * It is injected by executor
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Executor
+ */
+public class
+ExecutionContext
+{
+ /**
+ * Registry for {@link Policy}
+ */
+ protected final PolicyRegistry registry;
+
+ /**
+ * {@link Prompter} for user interaction
+ */
+ protected final Prompter prompter;
+
+ /**
+ * {@link FileHandler} for file system
+ */
+ protected final FileHandler fileHandler;
+
+
+ /**
+ * Constructor with {@link PolicyRegistry}, {@link Prompter} and {@link FileHandler}
+ *
+ * @param registry {@link PolicyRegistry} to use
+ * @param prompter {@link Prompter} to use
+ * @param fileHandler {@link FileHandler} to use
+ */
+ public
+ ExecutionContext(
+ final PolicyRegistry registry,
+ final Prompter prompter,
+ final FileHandler fileHandler
+ )
+ {
+ this.registry= registry;
+ this.prompter = prompter;
+ this.fileHandler = fileHandler;
+ }
+
+
+ /**
+ * Return {@link PolicyRegistry} to be using
+ *
+ * @return {@link PolicyRegistry}
+ */
+ public
+ PolicyRegistry
+ getPolicyRegistry()
+ {
+ return this.registry;
+ }
+
+ /**
+ * Return {@link Policy} for <code>name</code>
+ *
+ * @param name policy name
+ *
+ * @return {@link Policy} matching by <code>name<code>
+ *
+ * @see PolicyRegistry#getPolicy(String);
+ */
+ public
+ Policy
+ getPolicy(
+ final String name
+ )
+ {
+ return this.registry.getPolicy( name );
+ }
+
+ /**
+ * Return {@link Prompter} to be using
+ *
+ * @return {@link Prompter}
+ */
+ public
+ Prompter
+ getPrompter()
+ {
+ return this.prompter;
+ }
+
+ /**
+ * Return {@link FileHandler} to be using
+ *
+ * @return {@link FileHandler}
+ */
+ public
+ FileHandler
+ getFileHandler()
+ {
+ return this.fileHandler;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/Executor.java b/org.tizen.common/src/org/tizen/common/core/command/Executor.java
new file mode 100644
index 000000000..6cd4e291a
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/Executor.java
@@ -0,0 +1,213 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import static org.tizen.common.core.command.Policy.EXCEPTION_UNHANDLED;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.Factory;
+
+
+/**
+ * <p>
+ * Executor.
+ *
+ * Execute command in specific environment
+ *
+ * Environment is specified by {@link #contextFactory}
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+Executor
+{
+ /**
+ * Logger for this instance
+ */
+ protected Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Factory for {@link ExecutionContext}
+ */
+ protected Factory<ExecutionContext> contextFactory;
+
+ /**
+ * Cabinet for {@link ExecutionContext}
+ *
+ * Context is sustain in execution and destroy after exection
+ *
+ * @see #contextFactory
+ */
+ protected ThreadLocal<ExecutionContext> contexts = new ThreadLocal<ExecutionContext>()
+ {
+ /* (non-Javadoc)
+ * @see java.lang.ThreadLocal#initialValue()
+ */
+ @Override
+ protected
+ ExecutionContext
+ initialValue()
+ {
+ if ( null == contextFactory )
+ {
+ return null;
+ }
+ return contextFactory.create();
+ };
+ };
+
+ /**
+ * Default constructor
+ */
+ public
+ Executor()
+ {
+ }
+
+ /**
+ * Constructor with context factory
+ *
+ * @param factory context factory to use
+ *
+ * @see #setContextFactory(Factory)
+ */
+ public
+ Executor(
+ final Factory<ExecutionContext> factory
+ )
+ {
+ setContextFactory( factory );
+ }
+
+ /**
+ * Return context factory
+ *
+ * @return context factory in use
+ */
+ public
+ Factory<ExecutionContext>
+ getContextFactory()
+ {
+ return this.contextFactory;
+ }
+
+ /**
+ * Set context factory
+ *
+ * @param factory context factory to use
+ */
+ public
+ void
+ setContextFactory(
+ final Factory<ExecutionContext> factory
+ )
+ {
+ logger.info( "ExecutionContextFactory :{}", factory );
+ this.contextFactory = factory;
+ }
+
+ /**
+ * Execute <code>commands</code>
+ *
+ * @param commands {@link Command}s
+ */
+ public
+ void
+ execute(
+ final Command<?>... commands
+ )
+ {
+ logger.trace( "Commands :{}", commands );
+ contexts.remove();
+
+ execute( contexts.get(), commands );
+
+ }
+ public
+ void
+ execute(
+ final ExecutionContext context,
+ final Command<?>... commands
+ )
+ {
+
+ try {
+ for ( final Command<?> command : commands )
+ {
+ command.run( this, context );
+ }
+ } catch ( final Exception e ) {
+ final Policy policy = context.getPolicy( EXCEPTION_UNHANDLED );
+ if ( null == policy )
+ { // No policy
+ logger.error( "Error occured", e );
+ return ;
+ }
+
+ final UncaughtExceptionHandler handler = policy.adapt( UncaughtExceptionHandler.class );
+ if ( null == handler )
+ {
+ throw new IllegalStateException( e );
+ }
+ handler.uncaughtException( Thread.currentThread(), e );
+ }
+ finally
+ {
+ contexts.remove();
+ }
+ }
+
+ /**
+ * Execute <code>command</code> in <code>context</code>
+ *
+ * @param command {@link Command} to run
+ * @param context {@link ExecutionContext} to run in
+ */
+ public void
+ run(
+ final Command<?> command,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ command.run( this, context );
+ }
+
+ /**
+ * Return {@link ExecutionContext} in context
+ *
+ * @return {@link ExecutionContext}
+ */
+ public ExecutionContext
+ getContext()
+ {
+ return contexts.get();
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/Policy.java b/org.tizen.common/src/org/tizen/common/core/command/Policy.java
new file mode 100644
index 000000000..479d2f344
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/Policy.java
@@ -0,0 +1,154 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import org.tizen.common.Adaptable;
+
+
+/**
+ * <p>
+ * Policy.
+ *
+ * Adapter to other class when specific situation
+ *
+ * Situation specification is defined by naming rule
+ *
+ * Situation is define hierachically and is like tree structure
+ *
+ * Situation name has qualified name separating dot( '.' ).
+ *
+ * Each name fragment means node name in tree and qualified name stands for unique path.
+ *
+ * If there is no matching policy in registry, it provide policy having least distance.
+ *
+ * <ul>
+ * <li>nonexist
+ * <ul>
+ * <li>file
+ * <ul>
+ * <li>in</li>
+ * </ul>
+ * </li>
+ * <li>dir
+ * <ul>
+ * <li>in
+ * <ul>
+ * <li>project</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </li>
+ * <li>exist
+ * <ul>
+ * <li>file
+ * <ul>
+ * <li>out
+ * <ul>
+ * <li>wgt</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </ul>
+ * </li>
+ * <li>exception
+ * <ul>
+ * <li>unhandled</li>
+ * <li>file
+ * <ul>
+ * <li>out
+ * <ul>
+ * <li>wgt</li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </li>
+ * </ul>
+ * </li>
+ * </ul>
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+Policy
+extends Adaptable
+{
+ /**
+ * When input file doesn't exist
+ */
+ String NONEXIST_IN_FILE = "nonexist.file.in";
+
+ /**
+ * When input sign profile
+ */
+ String NONEXIST_IN_FILE_SIGN_PROFILE = "nonexist.file.in.signprofile";
+
+ /**
+ * When input directory doesn't exist
+ */
+ String NONEXIST_IN_DIRECTORY = "nonexist.dir.in";
+
+ /**
+ * When input project directory doesn't exist
+ */
+ String NONEXIST_IN_PROJECT = "nonexist.dir.in.project";
+
+ /**
+ * When output file already exists
+ */
+ String EXIST_OUT_FILE = "exist.file.out";
+ /**
+ * When output widget file already exists
+ */
+ String EXIST_OUT_WGT = "exist.file.out.wgt";
+
+ /**
+ * When target file is already exist.
+ */
+ String EXIST_FILE_WHEN_COPY = "exist.file.when.copy";
+
+ /**
+ * When unexpected exception occured
+ */
+ String EXCEPTION_UNHANDLED = "exception.unhandled";
+ /**
+ * When exception occured in handling output widget file
+ */
+ String EXCEPTION_OUT_WGT = "exception.file.out.wgt";
+
+ String PRINTOUT_RESULT_SIGNING = "printout.result.signing";
+
+ /**
+ * Return policy name
+ *
+ * policy name is unique indentifier
+ *
+ * @return policy name
+ */
+ String getName();
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/PolicyRegistryFactory.java b/org.tizen.common/src/org/tizen/common/core/command/PolicyRegistryFactory.java
new file mode 100644
index 000000000..d055af04d
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/PolicyRegistryFactory.java
@@ -0,0 +1,240 @@
+/*
+ * Web IDE - Command Line Interface
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import static org.tizen.common.core.command.Policy.EXIST_OUT_FILE;
+import static org.tizen.common.core.command.Policy.NONEXIST_IN_FILE;
+import static org.tizen.common.core.command.Policy.EXIST_FILE_WHEN_COPY;
+import static org.tizen.common.core.command.Policy.EXCEPTION_UNHANDLED;
+import java.io.File;
+import org.tizen.common.Factory;
+import org.tizen.common.core.command.policy.AbstractPolicy;
+import org.tizen.common.core.command.policy.FilePolicy;
+import org.tizen.common.core.command.policy.MessagePolicy;
+import org.tizen.common.core.command.policy.OptionPolicy;
+import org.tizen.common.core.command.policy.PolicyRegistry;
+import org.tizen.common.core.command.policy.UncaughtExceptionHandlingPolicy;
+import org.tizen.common.core.command.prompter.RunableOption;
+import org.tizen.common.file.StandardFileHandler;
+
+/**
+ * <p>
+ * PolicyRegistryFactory.
+ *
+ * {@link Factory} to provide {@link PolicyRegistry} in eclipse ide
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+PolicyRegistryFactory
+implements Factory<PolicyRegistry>
+{
+ /**
+ * <p>
+ * CLIPolicy.
+ *
+ * {@link Policy} when command line interface
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see PolicyRegistry, {@link Policy}
+ */
+ class EclipsePolicy
+ extends AbstractPolicy
+ {
+ /**
+ * <p>
+ * Constructor with <code>name</code>
+ * </p>
+ *
+ * @param name policy name
+ */
+ public EclipsePolicy( final String name )
+ {
+ super( name );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.Adaptable#adapt(java.lang.Class)
+ */
+ @Override
+ @SuppressWarnings("unchecked")
+ public <T>
+ T
+ adapt(
+ final Class<T> clazz
+ )
+ {
+ if ( clazz.isAssignableFrom( FilePolicy.class ) )
+ {
+ return (T) FilePolicy.STOP_PROCESS;
+ }
+ else if ( clazz.isAssignableFrom( MessagePolicy.class) )
+ {
+ return (T) MessagePolicy.PROMPTER;
+ }
+ else if ( clazz.isAssignableFrom(UncaughtExceptionHandlingPolicy.class))
+ {
+ return (T) UncaughtExceptionHandlingPolicy.INSTANCE;
+ }
+ return null;
+ }
+
+ }
+ /* (non-Javadoc)
+ * @see org.tizen.common.Factory#create()
+ */
+ @Override
+ public
+ PolicyRegistry
+ create()
+ {
+ final PolicyRegistry registry = new PolicyRegistry();
+
+ registry.register( new EclipsePolicy( EXIST_FILE_WHEN_COPY ) {
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T adapt(Class<T> clazz) {
+ if(clazz.isAssignableFrom(OptionPolicy.class)) {
+
+ RunableOption overwrite = new RunableOption("overwrite") {
+
+ private StandardFileHandler handler = new StandardFileHandler();
+
+ @Override
+ public void runWithArgument(Object... args) throws Exception {
+ if(args.length != 2) {
+ throw new IllegalArgumentException("argument length is wrong");
+ }
+
+ if(!(args[0] instanceof File && args[1] instanceof File)) {
+ throw new IllegalArgumentException("argument type is wrong");
+ }
+
+ File sourceFile = ((File)args[0]);
+ File targetFile = ((File)args[1]);
+
+ handler.copyFile(sourceFile.getPath(), targetFile.getPath());
+ }
+
+ @Override
+ public boolean isDefault() {
+ return false;
+ }
+ };
+
+ RunableOption ignore = new RunableOption("ignore") {
+
+ @Override
+ public boolean isDefault() {
+ return true;
+ }
+
+ @Override
+ protected void runWithArgument(Object... args) throws Exception{
+ }
+ };
+
+ RunableOption overwriteAll = new RunableOption("overwriteAll") {
+
+ private StandardFileHandler handler = new StandardFileHandler();
+
+ @Override
+ public boolean isDefault() {
+ return false;
+ }
+
+ @Override
+ protected void runWithArgument(Object... args) throws Exception {
+ super.setAllFlag(true);
+
+ if(args.length != 2) {
+ throw new IllegalArgumentException("argument length is wrong");
+ }
+
+ if(!(args[0] instanceof File && args[1] instanceof File)) {
+ throw new IllegalArgumentException("argument type is wrong");
+ }
+
+ File sourceFile = ((File)args[0]);
+ File targetFile = ((File)args[1]);
+
+ handler.copyFile(sourceFile.getPath(), targetFile.getPath());
+ }
+ };
+
+ RunableOption ignoreAll = new RunableOption("ignoreAll") {
+
+ @Override
+ public boolean isDefault() {
+ return false;
+ }
+
+ @Override
+ protected void runWithArgument(Object... args) throws Exception{
+ super.setAllFlag(true);
+ }
+ };
+
+ RunableOption cancel = new RunableOption("cancel") {
+
+ @Override
+ public boolean isDefault() {
+ return false;
+ }
+
+ @Override
+ protected void runWithArgument(Object... args) throws Exception{
+ }
+ };
+
+ return (T)(new OptionPolicy(overwrite, ignore, overwriteAll, ignoreAll, cancel));
+ }
+ return super.adapt(clazz);
+ }
+ });
+
+ registry.register(new EclipsePolicy(EXCEPTION_UNHANDLED) {
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T adapt(Class<T> clazz) {
+ if ( clazz.isAssignableFrom(UncaughtExceptionHandlingPolicy.class))
+ {
+ return (T) UncaughtExceptionHandlingPolicy.INSTANCE;
+ }
+ return null;
+ }
+ });
+ registry.register( new EclipsePolicy(EXIST_OUT_FILE));
+ registry.register( new EclipsePolicy( NONEXIST_IN_FILE ) );
+
+ return registry;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/Prompter.java b/org.tizen.common/src/org/tizen/common/core/command/Prompter.java
new file mode 100644
index 000000000..a76752b74
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/Prompter.java
@@ -0,0 +1,94 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import org.tizen.common.core.command.prompter.Option;
+
+/**
+ * <p>
+ * Prompter.
+ *
+ * Handle user interaction
+ * <ul>
+ * <li>user input</li>
+ * <li>message output</li>
+ * <ul>
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+Prompter
+{
+ /**
+ * <p>
+ * Input user selection.
+ *
+ * The selection must be in <code>options</code>
+ * </p>
+ *
+ * @param question selection message
+ * @param options options to choice
+ *
+ * @return user selection
+ */
+ Option interact( final String question, final Option... options );
+
+ /**
+ * <p>
+ * Input user input as password
+ *
+ * Password must be secured
+ * </p>
+ *
+ * @param message message for user password
+ *
+ * @return user input as password
+ */
+ char[] password( String message );
+
+ /**<p>
+ * Print out error message
+ * </p>
+ *
+ * @param message error message
+ */
+ void error( final String message );
+
+ /**
+ * Print out information message to notify
+ *
+ * @param message notification message
+ */
+ void notify( final String message );
+
+ /**
+ * User cancle work in process
+ */
+ void cancel();
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java b/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java
new file mode 100644
index 000000000..d1ea1f65b
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java
@@ -0,0 +1,145 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Ho Namkoong <ho.namkoong@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.file;
+
+import java.io.File;
+import java.util.List;
+import java.util.Stack;
+
+import org.tizen.common.core.command.AbstractCommand;
+import org.tizen.common.core.command.CommandCancelException;
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.core.command.Policy;
+import org.tizen.common.core.command.policy.OptionPolicy;
+import org.tizen.common.core.command.prompter.Option;
+import org.tizen.common.core.command.prompter.RunableOption;
+import org.tizen.common.file.StandardFileHandler;
+import org.tizen.common.util.log.Logger;
+
+/**
+ * <p>
+ * DirectoryCopyHandlingCommand.
+ * This class is used for copying source directory to the target directory.
+ * {@link FileHandlingCommand}
+ * </p>
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+
+public class DirectoryCopyHandlingCommand extends FileHandlingCommand<Boolean> {
+
+ /**
+ * List of target path
+ */
+ protected List<String> targetPathList;
+
+ /**
+ * List of source path
+ */
+ protected List<String> sourcePathList;
+
+ public DirectoryCopyHandlingCommand(List<String> sourcePathList, List<String> targetPathList) throws IllegalArgumentException{
+ if(sourcePathList.size() != targetPathList.size()) {
+ throw new IllegalArgumentException("Lenghs of sourcePathList and target paths are not same");
+ }
+ this.sourcePathList = sourcePathList;
+ this.targetPathList = targetPathList;
+ }
+
+
+ @Override
+ public void run(Executor executor, ExecutionContext context)
+ throws Exception {
+ StandardFileHandler handler = new StandardFileHandler();
+ Policy policy = context.getPolicy(Policy.EXIST_FILE_WHEN_COPY);
+ OptionPolicy optionPolicy = policy.adapt( OptionPolicy.class );
+ Option[] options = optionPolicy.getOptions();
+
+ for(Option option: options) {
+ if(!(option instanceof RunableOption)) {
+ throw new IllegalArgumentException("Option " + option.getName() + " is not RunnableOption");
+ }
+ }
+
+ for(int i =0; i< sourcePathList.size(); i++) {
+ String sourcePath = sourcePathList.get(i);
+ String targetPath = targetPathList.get(i);
+
+ final Stack<File> sourceStack = new Stack<File>();
+ final Stack<File> targetStack = new Stack<File>();
+ sourceStack.push( new File(sourcePath ) );
+ targetStack.push( new File( targetPath ) );
+
+ while ( !sourceStack.isEmpty() )
+ {
+ final File sourceFile = sourceStack.pop();
+ final File targetFile = targetStack.pop();
+
+ if ( sourceFile.isDirectory() )
+ {
+ handler.makeDirectory(targetFile.getPath());
+ for ( final File sourceChild : sourceFile.listFiles() )
+ {
+ sourceStack.push( sourceChild );
+ targetStack.push( new File( targetFile, sourceChild.getName() ) );
+ }
+ }
+ else if(sourceFile.isFile()) {
+ if(targetFile.exists()) {
+ boolean selectionDone = false;
+ RunableOption resultOption = null;
+
+ for (Option option : options) {
+ if(((RunableOption)option).isAllFlag()) {
+ resultOption = (RunableOption)option;
+ selectionDone = true;
+ break;
+ }
+ }
+
+ if(!selectionDone) {
+ resultOption = (RunableOption)context.getPrompter().interact(targetFile.getCanonicalPath() + " already exist", options);
+ }
+ if(AbstractCommand.COMMAND_CANCEL.equals(resultOption.getName())) {
+ throw new CommandCancelException();
+ }
+
+ resultOption.setArgument(sourceFile, targetFile);
+ resultOption.run();
+ }
+ else {
+ System.out.println(targetFile);
+ targetFile.createNewFile();
+ handler.copyFile(sourceFile.getPath(), targetFile.getPath());
+ }
+ }
+ else {
+ Logger.error(sourceFile + " is not file or directory");
+ }
+ }
+ }
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/file/FileHandlingCommand.java b/org.tizen.common/src/org/tizen/common/core/command/file/FileHandlingCommand.java
new file mode 100644
index 000000000..78f079e27
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/file/FileHandlingCommand.java
@@ -0,0 +1,192 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.file;
+
+import org.tizen.common.FactoryWithArgument;
+import org.tizen.common.core.command.AbstractCommand;
+import org.tizen.common.core.command.Command;
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.file.Filter;
+import org.tizen.common.file.SimpleFileFilter;
+import org.tizen.common.file.filter.WildCardFilterFactory;
+
+/**
+ * FileHandlingCommand.
+ *
+ * Abstract class for file handling {@link Command}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+FileHandlingCommand<T>
+extends AbstractCommand<T>
+{
+ /**
+ * Factory to create file name pattern filter
+ */
+ protected FactoryWithArgument<Filter, String> filterFactory = new WildCardFilterFactory();
+
+ /**
+ * File name filter
+ */
+ protected SimpleFileFilter filter = new SimpleFileFilter();
+
+ /**
+ * Handling main path
+ */
+ protected String path;
+
+ /**
+ * Set filter factory
+ *
+ * @param factory {@link FactoryWithArgument<Filter, String>}
+ *
+ * @see WildCardFilterFactory
+ */
+ public
+ void
+ setFilterFactory(
+ final FactoryWithArgument<Filter, String> factory
+ )
+ {
+ this.filterFactory = factory;
+ logger.debug( "Configured filter factory :{}", factory );
+ }
+
+ /**
+ * Set filter
+ * @param filter {@link SimpleFileFilter}
+ */
+ public
+ void
+ setFilter( SimpleFileFilter filter )
+ {
+ if ( null == filter )
+ {
+ throw new NullPointerException();
+ }
+ this.filter = filter;
+ logger.debug( "Configured filter :{}", filter );
+ }
+
+ /**
+ * Set including file name patterns
+ *
+ * @param includes including file name patterns
+ */
+ public
+ void
+ setIncludes(
+ final String[] includes
+ )
+ {
+ filter.clearIncludes();
+ if ( null != includes )
+ {
+ for ( final String include : includes )
+ {
+ filter.addIncludes( filterFactory.create( include ) );
+ }
+ }
+ }
+
+ /**
+ * Set excluding file name patterns
+ *
+ * @param excludes excluding file name patterns
+ */
+ public
+ void
+ setExcludes(
+ final String[] excludes
+ )
+ {
+ filter.clearExcludes();
+ if ( null != excludes )
+ {
+ for ( final String exclude : excludes )
+ {
+ filter.addExcludes( filterFactory.create( exclude ) );
+ }
+ }
+ }
+
+ /**
+ * Return main working path
+ *
+ * @return {@link #path}
+ */
+ public
+ String
+ getPath()
+ {
+ return this.path;
+ }
+
+ /**
+ * Set main working path
+ *
+ * @param path main working path
+ */
+ public
+ void
+ setPath(
+ final String path
+ )
+ {
+ this.path = path;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.AbstractCommand#execute(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ throw new UnsupportedOperationException();
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.AbstractCommand#undo(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public
+ void
+ undo(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/file/WriteFileCommand.java b/org.tizen.common/src/org/tizen/common/core/command/file/WriteFileCommand.java
new file mode 100644
index 000000000..9b60e18a5
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/file/WriteFileCommand.java
@@ -0,0 +1,40 @@
+package org.tizen.common.core.command.file;
+
+import java.io.ByteArrayInputStream;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.util.ObjectUtil;
+
+public class
+WriteFileCommand
+extends FileHandlingCommand<Boolean>
+{
+ protected final byte[] contents;
+
+ public WriteFileCommand( final String path, final byte[] contents )
+ {
+ setPath( path );
+ this.contents = contents;
+ }
+
+ @Override
+ public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ final byte[] safeBytes = ObjectUtil.nvl( contents, new byte[0] );
+
+ logger.trace( "Trying write {} in {} bytes", path, safeBytes.length );
+
+ context.getFileHandler().write(
+ path,
+ new ByteArrayInputStream( safeBytes )
+ );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/AbstractMessagePolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/AbstractMessagePolicy.java
new file mode 100644
index 000000000..1c1ca7679
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/AbstractMessagePolicy.java
@@ -0,0 +1,66 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import static org.tizen.common.util.StringUtil.NULL_STRING;
+
+import java.text.MessageFormat;
+
+/**
+ * AbstractMessagePolicy.
+ *
+ * Abstract class for {@link MessagePolicy}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+abstract public class
+AbstractMessagePolicy
+implements MessagePolicy
+{
+
+ /**
+ * Provide common formatting rule
+ *
+ * @param format message format
+ * @param args message arguments
+ *
+ * @return formatted message
+ */
+ protected
+ String
+ format(
+ final String format,
+ final Object... args
+ )
+ {
+ if ( null == format )
+ {
+ return NULL_STRING;
+ }
+ return MessageFormat.format( format, args );
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/AbstractPolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/AbstractPolicy.java
new file mode 100644
index 000000000..25b12a551
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/AbstractPolicy.java
@@ -0,0 +1,73 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import org.tizen.common.core.command.Policy;
+
+/**
+ * AbstractPolicy.
+ *
+ * Abstract class for {@link Policy}
+ *
+ * All policy must have name and can't change it
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+abstract public class
+AbstractPolicy
+implements Policy
+{
+
+ /**
+ * Policy name
+ */
+ protected final String name;
+
+ /**
+ * Constructor with policy name
+ *
+ * @param name poclicy name
+ *
+ * @see Policy
+ */
+ public
+ AbstractPolicy(
+ final String name
+ )
+ {
+ this.name = name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Policy#getName()
+ */
+ @Override
+ public
+ String
+ getName()
+ {
+ return this.name;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/FilePolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/FilePolicy.java
new file mode 100644
index 000000000..d70487f09
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/FilePolicy.java
@@ -0,0 +1,76 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+
+/**
+ * FilePolicy.
+ *
+ * File handling policy
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public enum
+FilePolicy
+{
+ /**
+ * <p>
+ * Stop process.
+ *
+ * Throw exception
+ * </p>
+ */
+ STOP_PROCESS,
+
+ /**
+ * <p>
+ * Skip process.
+ *
+ * Don't throw exception
+ * </p>
+ */
+ SKIP,
+
+ /**
+ * <p>
+ * overwwrite when already exist
+ * </p>
+ */
+ OVERWRITE,
+
+ /**
+ * <p>
+ * Make directory when directory doesn't exist
+ * </p>
+ */
+ MAKE_DIR,
+
+ /**
+ * <p>
+ * Make file when file doesn't exist
+ * </p>
+ */
+ MAKE_FILE
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/MessagePolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/MessagePolicy.java
new file mode 100644
index 000000000..379c601c5
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/MessagePolicy.java
@@ -0,0 +1,146 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.core.command.Prompter;
+
+/**
+ * FilePolicy.
+ *
+ * File handling policy
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+MessagePolicy
+{
+ /**
+ * Print out message
+ *
+ * @param prompter {@link Prompter}
+ * @param format message format
+ * @param args message arguments
+ */
+ void
+ print(
+ final Prompter prompter,
+ final String format,
+ final Object... args
+ );
+
+ /**
+ * Print out error message
+ * @param prompter {@link Prompter}
+ * @param format message format
+ * @param args message arguments
+ */
+ void
+ error(
+ final Prompter prompter,
+ final String format,
+ final Object... args
+ );
+
+ /**
+ * {@link MessagePolicy} to print out using logger
+ *
+ * FIXME caller fqcn is constants
+ */
+ MessagePolicy LOGGING = new AbstractMessagePolicy()
+ {
+ /**
+ * Logger to use for message printing
+ */
+ protected final Logger logger =
+ LoggerFactory.getLogger( getClass() );
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.policy.MessagePolicy#print(org.tizen.common.core.command.Prompter, java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public
+ void
+ print(
+ final Prompter prompter,
+ final String format,
+ final Object... args
+ )
+ {
+ logger.debug( format( format, args ) );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.policy.MessagePolicy#error(org.tizen.common.core.command.Prompter, java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public void error(
+ final Prompter prompter,
+ final String format,
+ final Object... args
+ )
+ {
+ logger.error( format( format, args ) );
+ }
+ };
+
+ /**
+ * {@link MessagePolicy} to print out using {@link Prompter}
+ */
+ MessagePolicy PROMPTER = new AbstractMessagePolicy()
+ {
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.policy.MessagePolicy#print(org.tizen.common.core.command.Prompter, java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public
+ void
+ print(
+ final Prompter prompter,
+ final String format,
+ final Object... args
+ )
+ {
+ prompter.notify( format( format, args ) );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.policy.MessagePolicy#error(org.tizen.common.core.command.Prompter, java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public void error(
+ final Prompter prompter,
+ final String format,
+ final Object... args
+ )
+ {
+ prompter.error( format( format, args ) );
+
+ }
+ };
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/OptionPolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/OptionPolicy.java
new file mode 100644
index 000000000..df6e4821f
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/OptionPolicy.java
@@ -0,0 +1,60 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Ho Namkoong <ho.namkoong@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.core.command.policy;
+
+import org.tizen.common.core.command.prompter.Option;
+
+/**
+ * OptionPolicy
+ * This policy returns options which are needed for Prompt#interact(final String question, final Option... options).
+ * @See Command, Prompter
+ * @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
+ */
+
+public class OptionPolicy {
+
+ protected Option[] options;
+
+ /**
+ * <p>
+ * Constructor with <code>options</code>
+ * </p>
+ *
+ * @param options options which this policy will return.
+ */
+ public OptionPolicy(Option... options) {
+ this.options = options;
+ }
+
+ /**
+ * Returns options this policy has.
+ *
+ * @return return options.
+ */
+ public Option[] getOptions() {
+ return options;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/PolicyRegistry.java b/org.tizen.common/src/org/tizen/common/core/command/policy/PolicyRegistry.java
new file mode 100644
index 000000000..0308d6ac6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/PolicyRegistry.java
@@ -0,0 +1,294 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import java.util.HashMap;
+
+import org.tizen.common.core.command.Policy;
+import org.tizen.common.util.StringUtil;
+
+
+/**
+ * <p>
+ * PolicyRegistry.
+ *
+ * Registry for {@link Policy}
+ *
+ * {@link Policy} is stored in tree-like structure
+ *
+ * A node has {@link Policy} or doesn't
+ *
+ * A node has multiple child nodes
+ *
+ * Policy's location is made a decision by its name
+ *
+ * name is composed of subname and separator( "<b>.</b>" )
+ *
+ * example for name is following
+ * <ul>
+ * <li>invalid.input.format.file</li>
+ * <li>nonexist.input.file</li>
+ * <li>exist.output.file</li>
+ * </ul>
+ * </p>
+ * @author bylee
+ *
+ */
+public class PolicyRegistry
+{
+ /**
+ * Node.
+ *
+ * Node for tree structure
+ *
+ * @author bylee
+ *
+ */
+ class Node
+ {
+
+ /**
+ * {@link Policy} stored in node
+ */
+ protected Policy policy;
+
+ /**
+ * Default constructor
+ */
+ public Node()
+ {
+ }
+
+ /**
+ * Constructor with {@link Policy}
+ *
+ * @param policy {@link Policy} to store
+ */
+ public Node(
+ final Policy policy
+ )
+ {
+ this.policy = policy;
+ }
+
+ protected final HashMap<String, Node> name2child =
+ new HashMap<String, PolicyRegistry.Node>();
+
+ /**
+ * Rerturn {@link Policy} to be stored
+ *
+ * @return policy to be stored
+ */
+ public Policy getPolicy()
+ {
+ return this.policy;
+ }
+
+ /**
+ * Set policy
+ *
+ * @param policy {@link Policy} to store
+ */
+ public void setPolicy(
+ final Policy policy
+ )
+ {
+ this.policy = policy;
+ }
+
+
+ /**
+ * Get child node with <code>name</code> in this node
+ *
+ * @param name node's name
+ *
+ * @return child node with <code>name</code>
+ */
+ public Node getChild(
+ final String name
+ )
+ {
+ return name2child.get( name );
+ }
+
+ /**
+ * Add <code>node</code> with <code>name</code> as child
+ *
+ * @param name node name
+ * @param node node to add
+ */
+ public void addChild( final String name, Node node )
+ {
+ name2child.put( name, node );
+ }
+ }
+
+ /**
+ * No-operation policy. Missing object pattern
+ */
+ protected Policy noOp = new AbstractPolicy( "" )
+ {
+ /* (non-Javadoc)
+ * @see org.tizen.common.Adaptable#adapt(java.lang.Class)
+ */
+ @Override
+ public <T> T adapt( final Class<T> clazz )
+ {
+ return null;
+ }
+ };
+
+ /**
+ * Root node( in tree structure)
+ */
+ protected Node root = new Node();
+
+ /**
+ * Constructor with {@link Policy}s
+ *
+ * @param policies {@link Policy}s to add
+ *
+ * @see #register(Policy)
+ */
+ public
+ PolicyRegistry(
+ final Policy... policies
+ )
+ {
+ if ( null == policies )
+ {
+ return ;
+ }
+
+ register( policies );
+ }
+
+ /**
+ * Add <code>policies</code> to registry
+ *
+ * @param policies {@link Policy}s to add
+ */
+ public void
+ register(
+ final Policy... policies
+ )
+ {
+ for ( final Policy policy : policies )
+ {
+ final String name = policy.getName();
+
+ final Node node = createNode( name );
+
+ if ( null != node.getPolicy() )
+ {
+ throw new IllegalArgumentException( "Policy is duplicated" );
+ }
+
+ node.setPolicy( policy );
+ }
+
+ }
+
+ /**
+ * Create node with <code>path</code> in tree
+ *
+ * @param path node path from root in tree
+ *
+ * @return {@link Node} to be specified with <code>path</code>
+ */
+ public Node createNode( final String path )
+ {
+ final String[] fragments = StringUtil.split( path, "." );
+
+ Node iter = root;
+
+ for ( int i = 0, n = fragments.length ; i < n ; ++i )
+ {
+ Node child = iter.getChild( fragments[i] );
+ if ( null == child )
+ {
+ child = new Node();
+ iter.addChild( fragments[i], child );
+ }
+
+ iter = child;
+ }
+
+ return iter;
+ }
+
+ /**
+ * Return {@link Policy} from tree with <code>path</code>
+ *
+ * Return ancestor node's policy unless matching exactly
+ *
+ * @param path
+ *
+ * @return {@link Policy}
+ */
+ public Policy
+ getPolicy( final String path )
+ {
+ if ( StringUtil.isEmpty( path ) )
+ {
+ return noOp;
+ }
+ final String[] fragments = StringUtil.split( path, "." );
+
+ Node iter = root;
+
+ Policy policy = null;
+
+ for ( int i = 0, n = fragments.length ; i < n ; ++i )
+ {
+ if ( null != iter.getPolicy() )
+ {
+ policy = iter.getPolicy();
+ }
+
+ Node child = iter.getChild( fragments[i] );
+ if ( null == child )
+ {
+ return policy;
+ }
+ iter = child;
+ }
+
+ if ( null == iter.getPolicy() )
+ {
+ return policy;
+ }
+ return iter.getPolicy();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + "@" + Integer.toHexString( hashCode() ).substring( 0, 4 );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/SimplePolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/SimplePolicy.java
new file mode 100644
index 000000000..d0f7638cd
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/SimplePolicy.java
@@ -0,0 +1,49 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import org.tizen.common.core.command.Policy;
+
+public class SimplePolicy
+implements Policy {
+
+ protected String name;
+
+ public SimplePolicy( final String name )
+ {
+ this.name = name;
+ }
+ @Override
+ public <T> T adapt(Class<T> clazz) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/policy/UncaughtExceptionHandlingPolicy.java b/org.tizen.common/src/org/tizen/common/core/command/policy/UncaughtExceptionHandlingPolicy.java
new file mode 100644
index 000000000..f16f9c712
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/policy/UncaughtExceptionHandlingPolicy.java
@@ -0,0 +1,113 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Ho Namkoong <ho.namkoong@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import java.lang.Thread.UncaughtExceptionHandler;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.tizen.common.core.command.CommandCancelException;
+import org.tizen.common.util.log.Logger;
+
+/**
+ * UncaughtExceptionHandlingPolicy.
+ *
+ * Exception handling policy
+ * Singleton class implemented using enum
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+public enum UncaughtExceptionHandlingPolicy
+ implements
+ UncaughtExceptionHandler {
+
+ /**
+ * singleton instance.
+ */
+ INSTANCE();
+
+ /**
+ * map which stores handler (value) according to the throwable class name (name).
+ */
+ private final Map<String, UncaughtExceptionHandler> repository = new HashMap<String, UncaughtExceptionHandler>();
+
+ /**
+ * get handler from repository, and handle exception.
+ * If appropriate repository is not found,
+ * it searches for handler which handles superclass of target exception.
+ *
+ * @param t current thread
+ * @param e exception which should be handled
+ * @since 1.5
+ */
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+
+ UncaughtExceptionHandler handler = null;
+ Class<? extends Object> throwableClass = e.getClass();
+
+ do {
+ handler = repository.get(throwableClass.getCanonicalName());
+ if(handler != null) {
+ handler.uncaughtException(t, e);
+ return;
+ }
+
+ throwableClass = throwableClass.getSuperclass();
+ } while (!throwableClass.getCanonicalName().equals(Object.class.getCanonicalName()));
+
+ throw new IllegalStateException(e);
+ }
+
+ private UncaughtExceptionHandlingPolicy() {
+ installUncaughtExceptionHandlers();
+ }
+
+ private void installUncaughtExceptionHandlers() {
+
+ //Install OperationCancelException Handler
+ this.putHandler(CommandCancelException.class.getCanonicalName(), new UncaughtExceptionHandler() {
+ @Override
+ public void uncaughtException(Thread t, Throwable e) {
+ if(e instanceof CommandCancelException) {
+ throw (CommandCancelException)e;
+ }
+ else {
+ throw new IllegalStateException();
+ }
+ }
+ });
+ }
+
+ private void putHandler(String throwableName, UncaughtExceptionHandler handler) {
+ if(repository.containsKey(throwableName)) {
+ if(!repository.get(throwableName).equals(handler)) {
+ Logger.error("Handlers are duplicate assigned with one key: " + throwableName);
+ }
+ return;
+ }
+ repository.put(throwableName, handler);
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractOption.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractOption.java
new file mode 100644
index 000000000..d60b177d7
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractOption.java
@@ -0,0 +1,181 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.tizen.common.util.StringUtil.isEmpty;
+import static org.tizen.common.util.StringUtil.trim;
+
+import org.tizen.common.util.ObjectUtil;
+
+/**
+ * <p>
+ * AbstractOption.
+ *
+ * Abstract(common) class for option
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+AbstractOption
+implements Option
+{
+ /**
+ * <p>
+ * Option name
+ *
+ * It is printed out
+ * </p>
+ */
+ protected final String name;
+
+ /**
+ * Flag if user input is handled as abbreviation
+ */
+ protected final boolean bPermitAbbreviation;
+
+ /**
+ * Flag if this option is default( choice when user doesn't select option )
+ */
+ protected final boolean bDefault;
+
+ /**
+ * Constructor with choice name, default flag and abbreviation flag
+ *
+ * @param name choice name
+ * @param bDefault default flag
+ * @param bPermitAbbreviation abbreviation flag
+ */
+ public
+ AbstractOption(
+ final String name,
+ final boolean bDefault,
+ final boolean bPermitAbbreviation
+ )
+ {
+ this.name = trim( name );
+
+ this.bDefault = bDefault;
+
+ this.bPermitAbbreviation = bPermitAbbreviation;
+ }
+
+ /**
+ * Return option name
+ *
+ * @return option name
+ */
+ public String getName()
+ {
+ return this.name;
+ }
+
+ /**
+ * Return whether this choice is default {@link ChoiceOption}
+ *
+ * @return boolean value if this choice is default
+ */
+ public boolean isDefault()
+ {
+ return this.bDefault;
+ }
+
+ /**
+ * Return whether user input, <code>value</code> is match option
+ *
+ * @param value user input
+ *
+ * @return boolean value If matching
+ */
+ public
+ boolean
+ isMatch(
+ final String value
+ )
+ {
+ if ( name.equalsIgnoreCase( trim( value ) ) )
+ {
+ return true;
+ }
+
+ if ( isEmpty( value ) )
+ {
+ return false;
+ }
+ if ( bPermitAbbreviation )
+ {
+ return name.substring( 0, 1 ).equalsIgnoreCase( value.substring( 0, 1 ) );
+ }
+
+ return false;
+
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public
+ int
+ hashCode()
+ {
+ return name.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public
+ boolean
+ equals(
+ final Object obj
+ )
+ {
+ if ( !( obj instanceof ChoiceOption ) )
+ {
+ return false;
+ }
+ final ChoiceOption other = (ChoiceOption) obj;
+ return ObjectUtil.equals( this.name, other.name );
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ if ( isDefault() )
+ {
+ return "[" + name + "]";
+ }
+ return name;
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractPrompter.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractPrompter.java
new file mode 100644
index 000000000..701a9772c
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/AbstractPrompter.java
@@ -0,0 +1,86 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.core.command.Prompter;
+
+/**
+ * AbstractPrompter.
+ *
+ * Abstract class for sub class for {@link Prompter}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+AbstractPrompter
+{
+
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ protected
+ void
+ checkOptions( ChoiceOption[] options )
+ {
+ if ( null == options )
+ {
+ throw new NullPointerException();
+ }
+
+ final HashSet<Option> reducedOptions = new LinkedHashSet<Option>();
+ Option defaultOption = null;
+ final ArrayList<String> optionNames = new ArrayList<String>();
+ for ( final Option option : options )
+ {
+ if ( reducedOptions.contains( option ) )
+ {
+ throw new IllegalArgumentException(
+ "Question can't have duplicated choice(s) :" + option
+ );
+ }
+ optionNames.add( option.getName() );
+ reducedOptions.add( option );
+ if ( option.isDefault() )
+ {
+ if ( null != defaultOption )
+ {
+ throw new IllegalArgumentException(
+ "Question must have only one default choice"
+ );
+ }
+
+ defaultOption = option;
+ }
+ }
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/ChoiceOption.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/ChoiceOption.java
new file mode 100644
index 000000000..267941b5f
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/ChoiceOption.java
@@ -0,0 +1,95 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.tizen.common.util.StringUtil.hasText;
+
+import org.tizen.common.util.Assert;
+
+/**
+ * <p>
+ * Option.
+ *
+ * Option to choice
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+ChoiceOption
+extends AbstractOption
+{
+ /**
+ * Constructor with choice name
+ *
+ * @param name choice name
+ *
+ * #see {@link #Option(String, boolean)}
+ */
+ public
+ ChoiceOption(
+ final String name
+ )
+ {
+ this( name, false );
+ }
+
+ /**
+ * Constructor with choice name and default flag
+ *
+ * @param name choice name
+ * @param bDefault default flag
+ *
+ * @see #Option(String, boolean, boolean)
+ */
+ public
+ ChoiceOption(
+ final String name,
+ final boolean bDefault
+ )
+ {
+ this( name, bDefault, true );
+ }
+
+ /**
+ * Constructor with choice name, default flag and abbreviation flag
+ *
+ * @param name choice name
+ * @param bDefault default flag
+ * @param bPermitAbbreviation abbreviation flag
+ */
+ public
+ ChoiceOption(
+ final String name,
+ final boolean bDefault,
+ final boolean bPermitAbbreviation
+ )
+ {
+ super( name, bDefault, bPermitAbbreviation );
+ Assert.isTrue( hasText( name ) );
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/EclipsePrompter.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/EclipsePrompter.java
new file mode 100644
index 000000000..cb4f3e6d3
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/EclipsePrompter.java
@@ -0,0 +1,201 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.core.command.Prompter;
+import org.tizen.common.util.ObjectUtil;
+import org.tizen.common.util.StringUtil;
+
+/**
+ * <p>
+ * EclipsePrompter.
+ *
+ * Context aware prompter using extension
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+EclipsePrompter
+implements Prompter
+{
+ protected static final String EP_ID = "org.tizen.common.prompter";
+
+ protected static final String ATTR_SCOPE = "scope";
+
+ protected static final String ATTR_CLASS = "class";
+
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Default prompter
+ */
+ protected final Prompter defaultPrompter;
+
+ protected final HashMap<String, Prompter> name2prompter;
+
+ /**
+ * Constructor with default prompter
+ *
+ * @param defaultPrompter {@link Prompter}
+ */
+ public EclipsePrompter(
+ final Prompter defaultPrompter
+ )
+ {
+ this.defaultPrompter = defaultPrompter;
+ this.name2prompter = new HashMap<String, Prompter>();
+ }
+
+ protected Prompter
+ getPrompter()
+ {
+ final StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
+
+ final IExtensionRegistry registry = Platform.getExtensionRegistry();
+ final IExtensionPoint ep = registry.getExtensionPoint( EP_ID );
+ final IExtension[] exts = ep.getExtensions();
+
+ for ( final StackTraceElement stack : stacks )
+ {
+ final String className = stack.getClassName();
+
+ for ( final IExtension ext : exts )
+ {
+ final IConfigurationElement[] configs = ext.getConfigurationElements();
+ for ( IConfigurationElement config : configs )
+ {
+ final String scope = config.getAttribute( ATTR_SCOPE );
+ if ( StringUtil.isEmpty( scope ) )
+ {
+ continue;
+ }
+
+ if ( !ObjectUtil.equals( className, scope ) )
+ {
+ continue;
+ }
+
+ try {
+ return (Prompter) config.createExecutableExtension( ATTR_CLASS );
+ } catch ( CoreException e )
+ {
+ logger.error( "Can't create prompter :" + config.getAttribute( ATTR_CLASS ) );
+ return defaultPrompter;
+ }
+ }
+ }
+ }
+
+ return defaultPrompter;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#interact(java.lang.String, org.tizen.common.core.command.prompter.Option[])
+ */
+ @Override
+ public Option interact(
+ final String question,
+ final Option... options
+ )
+ {
+ final Prompter prompter = getPrompter();
+ return prompter.interact(question, options);
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#password(java.lang.String)
+ */
+ @Override
+ public
+ char[] password(
+ final String message
+ )
+ {
+ final Prompter prompter = getPrompter();
+ return prompter.password(message);
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#error(java.lang.String)
+ */
+ @Override
+ public
+ void
+ error(
+ final String message
+ )
+ {
+ final Prompter prompter = getPrompter();
+ prompter.error(message);
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#notify(java.lang.String)
+ */
+ @Override
+ public
+ void
+ notify(
+ final String message
+ )
+ {
+ final Prompter prompter = getPrompter();
+ prompter.notify(message);
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#cancel()
+ */
+ @Override
+ public
+ void
+ cancel()
+ {
+ final Prompter prompter = getPrompter();
+ prompter.cancel();
+ }
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + "@" + Integer.toHexString( hashCode() ).substring( 0, 4 );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/GenericOption.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/GenericOption.java
new file mode 100644
index 000000000..003b35bd8
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/GenericOption.java
@@ -0,0 +1,149 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.tizen.common.util.StringUtil.hasText;
+
+import org.tizen.common.util.Assert;
+
+/**
+ * <p>
+ * GenericOption.
+ *
+ * {@link ChoiceOption} for general input
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+GenericOption
+extends AbstractOption
+{
+
+ /**
+ * User input
+ */
+ protected String answer;
+
+ /**
+ * Default constructor
+ */
+ public
+ GenericOption()
+ {
+ super( "", false, false );
+ }
+
+ /**
+ * Constructor with choice name
+ *
+ * @param name choice name
+ *
+ * #see {@link #Option(String, boolean)}
+ */
+ public
+ GenericOption(final String name)
+ {
+ super( name, false, false );
+ this.answer = name;
+ }
+
+ /**
+ * Constructor with choice name and default flag
+ *
+ * @param name choice name
+ * @param bDefault default flag
+ *
+ * @see #Option(String, boolean, boolean)
+ */
+ public
+ GenericOption (
+ final String name,
+ final boolean bDefault
+ )
+ {
+ super( name, bDefault, false );
+ this.answer = name;
+ }
+
+ /**
+ * Constructor with choice name, default flag and abbreviation flag
+ *
+ * @param name choice name
+ * @param bDefault default flag
+ * @param bPermitAbbreviation abbreviation flag
+ */
+ public
+ GenericOption (
+ final String name,
+ final boolean bDefault,
+ final boolean bPermitAbbreviation
+ )
+ {
+ super( name, bDefault, bPermitAbbreviation );
+ Assert.isTrue( hasText( name ) );
+ this.answer = name;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.prompter.AbstractOption#isMatch(java.lang.String)
+ */
+ @Override
+ public
+ boolean
+ isMatch(
+ final String value
+ )
+ {
+ this.answer = value;
+ return true;
+ }
+
+ /**
+ * Return user input
+ *
+ * @return user input
+ */
+ public String
+ getAnswer()
+ {
+ return this.answer;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ if ( isDefault() )
+ {
+ return "[" + this.answer + "]";
+ }
+ return this.answer;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/NopPrompter.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/NopPrompter.java
new file mode 100644
index 000000000..c202a35b6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/NopPrompter.java
@@ -0,0 +1,129 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import org.tizen.common.core.command.Prompter;
+
+/**
+ * <p>
+ * NopPrompter.
+ *
+ * No-Operation Prompter doesn't interact with human
+ *
+ * It is used for batch process or test
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+NopPrompter
+extends AbstractPrompter
+implements Prompter
+{
+
+ protected char[] password;
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#interact(java.lang.String, int, org.tizen.common.core.command.prompter.Option[])
+ */
+ public
+ Option
+ interact(
+ final String question,
+ final Option... options
+ )
+ {
+ for ( Option option : options )
+ {
+ if ( option.isDefault() )
+ {
+ return option;
+ }
+ }
+ throw new IllegalArgumentException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#notify(java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public
+ void
+ notify(
+ final String message
+ )
+ {
+ logger.info( "Notification >>> {}", message );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#cancel()
+ */
+ @Override
+ public void cancel()
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#password(java.lang.String)
+ */
+ @Override
+ public
+ char[] password(
+ final String message
+ )
+ {
+ return password;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#error(java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public
+ void
+ error(
+ final String message
+ )
+ {
+ logger.error( "Error >>> {}", message );
+ }
+
+ /**
+ * Set password
+ *
+ * @param password password to be provided automatically
+ */
+ public
+ void
+ setPassword(
+ final char[] password
+ )
+ {
+ this.password = password;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/Option.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/Option.java
new file mode 100644
index 000000000..c2c624ce4
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/Option.java
@@ -0,0 +1,11 @@
+package org.tizen.common.core.command.prompter;
+
+public interface Option
+{
+ String getName();
+
+ boolean isDefault();
+
+ boolean isMatch( final String value );
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/RunableOption.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/RunableOption.java
new file mode 100644
index 000000000..dc78fe7de
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/RunableOption.java
@@ -0,0 +1,124 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Ho Namkoong <ho.namkoong@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+package org.tizen.common.core.command.prompter;
+
+public abstract class RunableOption implements Option{
+
+ /**
+ * Arguments which will be used in run.
+ */
+ private Object[] args;
+
+ /**
+ * if true, remaning selection is following this option
+ * For example, if you select ignore all or overwrite all when deuplicate files are found, then this flag becomes true.
+ */
+ private boolean allFlag = false;
+
+ /**
+ * name of this option
+ */
+ private String name;
+
+ /**
+ * Constructor with name
+ *
+ * @param name name of this operation
+ */
+ public RunableOption(String name) {
+ this.name = name;
+ this.args = null;
+ }
+
+ /**
+ * Constructor with name and arguments
+ *
+ * @param name name of this operation
+ * @param args arguments of this operation
+ */
+ public RunableOption(String name, Object... args) {
+ this.name = name;
+ this.args = args;
+ }
+
+ /**
+ * Set arguments
+ *
+ * @param args arguments of this operation
+ */
+ public void setArgument(Object... args) {
+ this.args = args;
+ }
+
+ /**
+ * Set all flag
+ *
+ * @param allFlag all flag of this operation
+ */
+ protected void setAllFlag(boolean allFlag) {
+ this.allFlag = allFlag;
+ }
+
+ /**
+ * return all flag
+ *
+ * @return return true if all flag is true, else return false
+ */
+ public boolean isAllFlag() {
+ return allFlag;
+ }
+
+ /**
+ * return name
+ *
+ * @return return name of this operation
+ */
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Check if name of this operation and value are matched.
+ *
+ * @arg value value which is compared with name of this operation
+ * @return return true if matched, else return false.
+ */
+ @Override
+ public boolean isMatch(String value) {
+ if(this.getName().equals(value)) {
+ return true;
+ }
+ return false;
+ }
+
+ protected abstract void runWithArgument(Object... args) throws Exception;
+
+ public void run() throws Exception {
+ this.runWithArgument(args);
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/prompter/SWTPrompter.java b/org.tizen.common/src/org/tizen/common/core/command/prompter/SWTPrompter.java
new file mode 100755
index 000000000..ca29bffc6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/prompter/SWTPrompter.java
@@ -0,0 +1,233 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.tizen.common.util.SWTUtil.asyncExec;
+import static org.tizen.common.util.SWTUtil.exec;
+import static org.tizen.common.util.SWTUtil.getActiveShell;
+import static org.tizen.common.util.SWTUtil.syncExec;
+import static org.tizen.common.util.StringUtil.trim;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.tizen.common.core.command.Prompter;
+import org.tizen.common.ui.dialog.PasswordInputDialog;
+import org.tizen.common.util.NotificationType;
+import org.tizen.common.util.NotifierDialog;
+import org.tizen.common.util.SWTRunner;
+
+/**
+ * <p>
+ * SWTPrompter.
+ *
+ * {@link Prompter} in SWT environment
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+SWTPrompter
+extends AbstractPrompter
+implements Prompter
+{
+
+ /**
+ * Create dialog for user interaction
+ *
+ * @param question message for dialog
+ * @param optionNames option names for dialog
+ * @param defaultOptionIndex initial selection for option
+ *
+ * @return {@link Dialog} for user selection
+ */
+ protected
+ Dialog
+ createDialog(
+ final String question,
+ final String[] optionNames,
+ final int defaultOptionIndex
+ )
+ {
+ return new MessageDialog(
+ getActiveShell(),
+ "Question",
+ null,
+ question,
+ MessageDialog.QUESTION,
+ optionNames,
+ defaultOptionIndex
+ )
+ {
+ protected void buttonPressed( int buttonId )
+ {
+ setReturnCode( buttonId );
+ close();
+ }
+ };
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#interact(java.lang.String, org.tizen.common.core.command.prompter.Option[])
+ */
+ @Override
+ public
+ Option
+ interact(
+ final String question,
+ final Option... options
+ )
+ {
+ final HashSet<Option> reducedOptions = new LinkedHashSet<Option>();
+ Option defaultOption = null;
+ final ArrayList<String> optionNames = new ArrayList<String>();
+ for ( final Option option : options )
+ {
+ if ( reducedOptions.contains( option ) )
+ {
+ throw new IllegalArgumentException(
+ "Question can't have duplicated choice(s) :" + option
+ );
+ }
+ optionNames.add( option.getName() );
+ reducedOptions.add( option );
+ if ( option.isDefault() )
+ {
+ if ( null != defaultOption )
+ {
+ throw new IllegalArgumentException(
+ "Question must have only one default choice"
+ );
+ }
+
+ defaultOption = option;
+ }
+ }
+ final int defaultIndex = optionNames.indexOf( defaultOption.getName() );
+
+ return exec( new SWTRunner<Option>()
+ {
+ /* (non-Javadoc)
+ * @see org.tizen.common.util.SWTRunner#process()
+ */
+ public Option process() {
+ final Dialog dialog = createDialog( question, optionNames.toArray( new String[0] ), defaultIndex );
+ dialog.open();
+ return options[dialog.getReturnCode()];
+ }
+ } );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#notify(java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public void
+ notify(
+ final String message
+ )
+ {
+ asyncExec( new Runnable() {
+
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ NotifierDialog.notify( "Notify", message, NotificationType.INFO );
+ }
+ } );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#cancel()
+ */
+ @Override
+ public void cancel() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#password(java.lang.String)
+ */
+ @Override
+ public
+ char[] password(
+ final String message
+ )
+ {
+ return exec( new SWTRunner<char[]>()
+ {
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public char[] process()
+ {
+ final PasswordInputDialog dialog =
+ new PasswordInputDialog( "Password Input Dialog", message );
+
+ dialog.open();
+
+ if ( IDialogConstants.OK_ID != dialog.getReturnCode() )
+ {
+ return null;
+ }
+
+ return trim( dialog.getValue() ).toCharArray();
+ }
+ } );
+
+
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.Prompter#error(java.lang.String, java.lang.Object[])
+ */
+ @Override
+ public
+ void
+ error(
+ final String message
+ )
+ {
+ syncExec( new Runnable() {
+
+ /* (non-Javadoc)
+ * @see java.lang.Runnable#run()
+ */
+ @Override
+ public void run() {
+ MessageDialog.openError( getActiveShell(), "Error", message );
+ }
+ } );
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/DevicesSdbCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/DevicesSdbCommand.java
new file mode 100644
index 000000000..e86d38d07
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/DevicesSdbCommand.java
@@ -0,0 +1,65 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.util.Assert;
+import org.tizen.sdblib.IDevice;
+
+public class DevicesSdbCommand
+extends SdbHandlingCommand
+{
+ protected SmartDevelopmentBridgeManager createBridge()
+ {
+ return new SmartDevelopmentBridgeManager();
+ }
+
+ @Override
+ public void run( final Executor executor, ExecutionContext context)
+ {
+ SmartDevelopmentBridgeManager bridge = createBridge();
+ Assert.notNull( bridge );
+
+ IDevice devices[] = bridge.getDevices();
+ String result = new String();
+ for ( IDevice device : devices )
+ {
+ result += device.toString() + System.getProperty("line.separator");
+ }
+ setResult( result );
+
+ context.getPrompter().notify( getResult() );
+ }
+
+ @Override
+ public void undo(final Executor executor, ExecutionContext context) throws Exception
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/DlogSdbCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/DlogSdbCommand.java
new file mode 100644
index 000000000..f4bfb887d
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/DlogSdbCommand.java
@@ -0,0 +1,54 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+
+public class DlogSdbCommand
+extends ShellSdbCommand
+{
+ protected String DLOG_COMMAND = "dlogutil";
+
+ public void setFilter(String filter) {
+ this.DLOG_COMMAND = "dlogutil "+filter;
+ }
+
+ @Override
+ public void run(Executor executor, ExecutionContext context)
+ throws Exception {
+ setCommand( this.DLOG_COMMAND );
+ super.run( executor, context );
+ }
+
+ @Override
+ public void undo(Executor executor, ExecutionContext context)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/ForwardSdbCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/ForwardSdbCommand.java
new file mode 100644
index 000000000..11540d85b
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/ForwardSdbCommand.java
@@ -0,0 +1,70 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.util.Assert;
+import org.tizen.sdblib.IDevice;
+
+public class ForwardSdbCommand
+extends SdbDevicesHandlingCommand
+{
+ private int localPort;
+ private int remotePort;
+
+ public ForwardSdbCommand(int localPort, int remotePort) {
+ this.localPort = localPort;
+ this.remotePort = remotePort;
+ }
+
+ @Override
+ public void run(final Executor executor, ExecutionContext context) throws InterruptedException {
+ IDevice device = getDevice();
+ Assert.notNull( device );
+
+ try {
+ device.createForward( localPort, remotePort );
+ } catch (Exception e) {
+ // TODO Message fix need
+ context.getPrompter().notify( "forward socket connections error" );
+ }
+ }
+
+ @Override
+ public void undo(Executor executor, ExecutionContext context)
+ throws Exception {
+ IDevice device = getDevice();
+ Assert.notNull( device );
+
+ try {
+ device.removeForward( localPort, remotePort );
+ } catch (Exception e) {
+ // TODO Message fix need
+ context.getPrompter().notify( "remove forward socket connections error" );
+ }
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/PullSdbCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/PullSdbCommand.java
new file mode 100644
index 000000000..925729877
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/PullSdbCommand.java
@@ -0,0 +1,87 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import java.io.IOException;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.util.Assert;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.SdbCommandRejectedException;
+import org.tizen.sdblib.SyncService;
+import org.tizen.sdblib.SyncService.ISyncProgressMonitor;
+import org.tizen.sdblib.SyncService.SyncResult;
+import org.tizen.sdblib.TimeoutException;
+
+public class PullSdbCommand
+extends SdbDevicesHandlingCommand
+{
+ protected String remotePath;
+ protected String localPath;
+
+ public PullSdbCommand(String remotePath, String localPath)
+ {
+ this.remotePath = remotePath;
+ this.localPath = localPath;
+ }
+
+ protected SyncService getSyncService() throws TimeoutException, SdbCommandRejectedException, IOException
+ {
+ return device.getSyncService();
+ }
+
+ protected ISyncProgressMonitor getProgressMonitor() {
+ return SyncService.getNullProgressMonitor();
+ }
+
+ @Override
+ public void run(final Executor executor, ExecutionContext context)
+ throws Exception
+ {
+ IDevice device = getDevice();
+ Assert.notNull( device );
+
+ try
+ {
+ SyncService service = getSyncService();
+ SyncResult syncSuccess =
+ service.pullFile( remotePath, localPath, getProgressMonitor() );
+ if ( syncSuccess.getCode() != SyncService.RESULT_OK ) {
+ // TODO Message fix need
+ context.getPrompter().notify( "transfer error" );
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ @Override
+ public void undo(final Executor executor, ExecutionContext context) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/PushSdbCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/PushSdbCommand.java
new file mode 100644
index 000000000..46db4c404
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/PushSdbCommand.java
@@ -0,0 +1,93 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import java.io.IOException;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.util.Assert;
+import org.tizen.common.util.FilenameUtil;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.SdbCommandRejectedException;
+import org.tizen.sdblib.SyncService;
+import org.tizen.sdblib.SyncService.ISyncProgressMonitor;
+import org.tizen.sdblib.SyncService.SyncResult;
+import org.tizen.sdblib.TimeoutException;
+
+public class PushSdbCommand
+extends SdbDevicesHandlingCommand
+{
+ protected String localPath;
+ protected String remotePath;
+
+ public PushSdbCommand(String localPath, String remotePath)
+ {
+ this.localPath = localPath;
+ this.remotePath = remotePath;
+ }
+
+ protected SyncService getSyncService() throws TimeoutException, SdbCommandRejectedException, IOException
+ {
+ return device.getSyncService();
+ }
+
+ protected ISyncProgressMonitor getProgressMonitor() {
+ return SyncService.getNullProgressMonitor();
+ }
+
+ @Override
+ public void run(final Executor executor, ExecutionContext context)
+ throws Exception
+ {
+ IDevice device = getDevice();
+ Assert.notNull( device );
+
+ try
+ {
+ SyncService service = getSyncService();
+ SyncResult syncSuccess =
+ service.pushFile( localPath, remotePath, getProgressMonitor() );
+ String name = FilenameUtil.getFilename( localPath );
+ if ( syncSuccess.getCode() != SyncService.RESULT_OK ) {
+ setResult( "failed" );
+ context.getPrompter().notify( name + " file transfer failed" );
+ return ;
+ }
+ setResult( "success" );
+ context.getPrompter().notify( name + " file transfer success" );
+ } catch (Exception e) {
+ throw new IllegalStateException( e );
+ }
+ }
+
+ @Override
+ public void undo(final Executor executor, ExecutionContext context) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/model/DefaultTreeModel.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/SdbDevicesHandlingCommand.java
index 687c3089a..95230fce0 100644
--- a/org.tizen.common/src/org/tizen/common/model/DefaultTreeModel.java
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/SdbDevicesHandlingCommand.java
@@ -1,44 +1,45 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-
-
-public class DefaultTreeModel extends AbstractTreeModel {
-
- public DefaultTreeModel(ITreeVO source){
- super(source);
- }
-
- public String getSourceName() {
- String str = this.source.getClass().getSimpleName();
- if(str.endsWith("VO")) //$NON-NLS-1$
- str = str.substring(0,str.length()-2);
- return str;
- }
-}
-
-
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.sdblib.IDevice;
+
+public abstract class
+SdbDevicesHandlingCommand
+extends SdbHandlingCommand
+{
+ protected IDevice device;
+
+ public void setDevice(IDevice device)
+ {
+ this.device = device;
+ }
+
+ public IDevice getDevice()
+ {
+ return this.device;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/SdbHandlingCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/SdbHandlingCommand.java
new file mode 100644
index 000000000..6c98a729a
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/SdbHandlingCommand.java
@@ -0,0 +1,60 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.common.core.command.Command;
+
+public abstract class
+SdbHandlingCommand
+implements Command<String>
+{
+ protected StringBuffer result;
+
+ public void clearResult() {
+ if ( this.result == null ) {
+ this.result = new StringBuffer();
+ } else {
+ this.result.delete( 0, result.capacity() );
+ this.result.setLength( 0 );
+ }
+ }
+
+ public String getResult()
+ {
+ if ( this.result == null ) {
+ return null;
+ }
+ return this.result.toString();
+ }
+
+ public void setResult(String result)
+ {
+ if ( this.result == null ) {
+ this.result = new StringBuffer();
+ }
+ this.result.append( result );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/ShellSdbCommand.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/ShellSdbCommand.java
new file mode 100644
index 000000000..5efc22f53
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/ShellSdbCommand.java
@@ -0,0 +1,142 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.util.Assert;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.MultiLineReceiver;
+
+/**
+ * <p>
+ * ShellSdbCommand.
+ *
+ * Command to run shell in target
+ * </p>
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class ShellSdbCommand
+extends SdbDevicesHandlingCommand
+{
+ private String command;
+ private static int DEFAULT_TIME = 90;
+
+ /**
+ * Wait for shell command completion
+ */
+ private int time;
+
+ /**
+ * Get wait for shell command completion time
+ *
+ * @return time value
+ */
+ public int getTime() {
+ return time;
+ }
+
+ /**
+ * Set wait for shell command completion time
+ *
+ * @param time value
+ */
+ public void setTime(int time) {
+ this.time = time <= 0 ? DEFAULT_TIME : time;
+ }
+
+ /**
+ * Constructor, default command is empty so if using this constructor then must call setCommand
+ */
+ public ShellSdbCommand() {
+ this.time = DEFAULT_TIME;
+ }
+
+ /**
+ * Constructor with command, command is running in target device.
+ *
+ * @param command
+ */
+ public ShellSdbCommand(String command) {
+ this.command = command;
+ this.time = DEFAULT_TIME;
+ }
+
+ /**
+ * Get command, command is running in target device
+ *
+ * @return command
+ */
+ public String getCommand() {
+ return command;
+ }
+
+ /**
+ * Set command, command is running in target device
+ *
+ * @param command
+ */
+ public void setCommand(String command) {
+ this.command = command;
+ }
+
+ /**
+ * Create MultiLineReceiver, MultiLineReceiver's processNewLines method save command running result
+ *
+ * @return MultiLineReceiver
+ */
+ public MultiLineReceiver createMultiLineReceiver() {
+ return new MultiLineReceiver() {
+ @Override
+ public void processNewLines(String[] lines) {
+ for( String content: lines ) {
+ setResult( content+System.getProperty( "line.separator" ) );
+ }
+ }
+ };
+ }
+
+ @Override
+ public void run(Executor executor, ExecutionContext context)
+ throws Exception {
+ IDevice device = getDevice();
+ Assert.notNull( device );
+ Assert.notNull( command );
+
+ clearResult();
+ device.executeShellCommand( command, createMultiLineReceiver(), getTime()*1000 );
+ }
+
+ @Override
+ public void undo(Executor executor, ExecutionContext context)
+ throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/sdb/SmartDevelopmentBridgeManager.java b/org.tizen.common/src/org/tizen/common/core/command/sdb/SmartDevelopmentBridgeManager.java
new file mode 100644
index 000000000..66a5bb9f4
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/sdb/SmartDevelopmentBridgeManager.java
@@ -0,0 +1,93 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.SmartDevelopmentBridge;
+
+/**
+ * <p>
+ * SmartDevelopmentBridgeManager.
+ *
+ * class for delegate SmartDevelopmentBridge.
+ *
+ * </p>
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class SmartDevelopmentBridgeManager
+{
+ private SmartDevelopmentBridge impl = SmartDevelopmentBridge.getBridge();
+
+ public boolean equals(Object obj) {
+ return impl.equals(obj);
+ }
+
+ public int getConnectionAttemptCount() {
+ return impl.getConnectionAttemptCount();
+ }
+
+ public IDevice[] getDevices() {
+ return impl.getDevices();
+ }
+
+ public int getRestartAttemptCount() {
+ return impl.getRestartAttemptCount();
+ }
+
+ public String getSdbOsLocation() {
+ return impl.getSdbOsLocation();
+ }
+
+ public boolean hasInitialDeviceList() {
+ return impl.hasInitialDeviceList();
+ }
+
+ public int hashCode() {
+ return impl.hashCode();
+ }
+
+ public boolean isConnected() {
+ return impl.isConnected();
+ }
+
+ public boolean restart() {
+ return impl.restart();
+ }
+
+ public String toString() {
+ return impl.toString();
+ }
+
+ public void disconnectBridge() {
+ impl.disconnectBridge();
+ }
+
+ public void terminate() {
+ impl.terminate();
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/core/command/zip/ZipCommand.java b/org.tizen.common/src/org/tizen/common/core/command/zip/ZipCommand.java
new file mode 100644
index 000000000..639349f30
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/core/command/zip/ZipCommand.java
@@ -0,0 +1,196 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.zip;
+
+import static org.tizen.common.core.command.Policy.EXIST_OUT_WGT;
+import static org.tizen.common.core.command.Policy.NONEXIST_IN_DIRECTORY;
+import static org.tizen.common.util.FilenameUtil.getRelativePath;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.core.command.Policy;
+import org.tizen.common.core.command.file.FileHandlingCommand;
+import org.tizen.common.core.command.policy.FilePolicy;
+import org.tizen.common.core.command.policy.MessagePolicy;
+import org.tizen.common.file.FileHandler;
+import org.tizen.common.file.FileHandler.Attribute;
+import org.tizen.common.file.FileHandler.Type;
+import org.tizen.common.util.Assert;
+import org.tizen.common.util.FilenameUtil;
+import org.tizen.common.util.IOUtil;
+
+/**
+ * <p>
+ * ZipCommand.
+ *
+ * Command to make zip archive
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+ZipCommand
+extends FileHandlingCommand<Object>
+{
+ /**
+ * Directory to zip
+ */
+ protected final String baseDir;
+
+ /**
+ * Constructor with base dir and target file name
+ *
+ * @param baseDir base directory path
+ * @param target target file name
+ */
+ public
+ ZipCommand(
+ final String baseDir,
+ final String target
+ )
+ {
+ this.baseDir = baseDir;
+ setPath( target );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.file.FileHandlingCommand#execute(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws IOException, InterruptedException
+ {
+ final FileHandler handler = context.getFileHandler();
+ Assert.notNull( handler );
+
+ if ( !handler.is( baseDir, Attribute.EXISTS ) )
+ {
+ final Policy policy = context.getPolicy( NONEXIST_IN_DIRECTORY );
+
+ final MessagePolicy messagePolicy = policy.adapt( MessagePolicy.class );
+
+ messagePolicy.print( context.getPrompter(), "{0} doesn't exist", baseDir );
+ return ;
+ }
+
+ if ( handler.is( path, Attribute.EXISTS ) )
+ {
+ final Policy policy = context.getPolicy( EXIST_OUT_WGT );
+
+ final MessagePolicy messagePolicy = policy.adapt( MessagePolicy.class );
+ messagePolicy.print( context.getPrompter(), "Widget already exists" );
+
+ final FilePolicy filePolicy = policy.adapt( FilePolicy.class );
+
+ if ( FilePolicy.OVERWRITE.equals( filePolicy ) )
+ {
+ // No op
+ }
+ else
+ { // It is default to stop process
+ return ;
+ }
+
+ }
+
+ final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ final ZipOutputStream zipOut = new ZipOutputStream( byteOut );
+
+ try
+ {
+ final Queue<String> directories = new LinkedList<String>();
+
+ directories.add( baseDir );
+
+ while ( !directories.isEmpty() )
+ {
+ final String filePath = directories.remove();
+ final Object type = handler.get( filePath, Attribute.TYPE );
+
+ logger.trace( "File path :{}", filePath );
+
+ if (
+ !FilenameUtil.equals( filePath, baseDir ) &&
+ !filter.accept( baseDir, FilenameUtil.getRelativePath( baseDir, filePath ) )
+ )
+ {
+ logger.debug( "Ignore {}", filePath );
+ continue;
+ }
+ logger.trace( "file [{}]'s type :{}", filePath, type );
+ if ( Type.DIRECTORY.equals( type ) )
+ {
+ final Collection<String> childs = handler.list( filePath );
+ directories.addAll( childs );
+ }
+ else if ( Type.FILE.equals( type ) )
+ {
+ final String relative = getRelativePath( baseDir, filePath );
+ final ZipEntry entry = new ZipEntry( relative );
+ zipOut.putNextEntry( entry );
+ IOUtil.redirect( handler.read( filePath ), zipOut );
+ logger.debug( "Zip {}", relative );
+ }
+ }
+ try {
+ handler.write( path, new ByteArrayInputStream( byteOut.toByteArray() ) );
+ context.getPrompter().notify( MessageFormat.format( "Widget[{0}] is created successfully ", path ) );
+ }
+ catch ( IOException e )
+ {
+ throw new IllegalStateException( e );
+ // TODO Handle
+ }
+ }
+ catch( IOException e )
+ {
+
+ // TODO Handle
+ }
+ finally
+ {
+ tryClose( zipOut );
+ }
+
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/AbstractFileHandler.java b/org.tizen.common/src/org/tizen/common/file/AbstractFileHandler.java
new file mode 100644
index 000000000..c25d7cfb2
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/AbstractFileHandler.java
@@ -0,0 +1,66 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * AbstractFileHandler.
+ *
+ * Abstract class for {@link FileHandler}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+abstract public class
+AbstractFileHandler
+implements FileHandler
+{
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#is(java.lang.String, org.tizen.common.file.FileHandler.Attribute)
+ */
+ @Override
+ public boolean is(
+ final String path,
+ final Attribute name
+ )
+ throws IOException
+ {
+ final Object obj = get( path, name );
+ if ( obj instanceof Boolean )
+ {
+ return (Boolean) obj;
+ }
+ return false;
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/EclipseFileHandler.java b/org.tizen.common/src/org/tizen/common/file/EclipseFileHandler.java
new file mode 100644
index 000000000..5e98ad426
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/EclipseFileHandler.java
@@ -0,0 +1,448 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import static org.tizen.common.util.CollectionUtil.concatenate;
+import static org.tizen.common.util.CollectionUtil.removeLast;
+import static org.tizen.common.util.FilenameUtil.getCanonicalForm;
+import static org.tizen.common.util.FilenameUtil.getRelativePath;
+import static org.tizen.common.util.FilenameUtil.isAncestor;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Queue;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.tizen.common.util.FilenameUtil;
+import org.tizen.common.util.ObjectUtil;
+
+/**
+ * <p>
+ * EclipseFileHandler.
+ *
+ * {@link FileHandler} for eclipse plugin
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+EclipseFileHandler
+extends StandardFileHandler
+{
+
+ /**
+ * @return
+ */
+ protected
+ IWorkspaceRoot
+ getWorkspace()
+ {
+ return ResourcesPlugin.getWorkspace().getRoot();
+ }
+
+ protected IResource getFile( final String path ) throws IOException
+ {
+ final String root = getWorkspace().getLocation().toPortableString();
+ logger.trace( "Path :{}, Root :{}", path, root );
+
+ final File fileChecker = new File( path );
+ String relativePath = path;
+ if ( isAncestor( root, path ) )
+ {
+ relativePath = getRelativePath( root, path );
+ }
+ else if ( fileChecker.isAbsolute() )
+ {
+ return null;
+ }
+
+ final Queue<String> fragments =
+ new LinkedList<String>( Arrays.asList( FilenameUtil.getCanonicalFragments( relativePath ) ) );
+
+ final String projectName = fragments.remove();
+ if ( ".metadata".equals( projectName ) )
+ {
+ return null;
+ }
+ final IProject project = getWorkspace().getProject( projectName );
+ if ( fragments.isEmpty() )
+ {
+ return project;
+ }
+
+ final String fileName = removeLast( fragments );
+
+ IContainer parent = project;
+ if ( !fragments.isEmpty() )
+ {
+ parent = project.getFolder( concatenate( fragments, "/" ) );
+ }
+
+ try {
+ final IResource[] children = parent.members();
+ for ( final IResource chlid : children )
+ {
+ if ( ObjectUtil.equals( fileName, chlid.getName() ) )
+ {
+ return chlid;
+ }
+ }
+ fragments.add( fileName );
+ final String relativeFile = concatenate( fragments, "/" );
+ return project.getFile( relativeFile );
+ } catch (
+ CoreException e
+ )
+ {
+ logger.warn( "Exception :{}", e );
+ }
+ return null;
+ }
+
+ protected IContainer getFolder( final String path )
+ {
+ final String root = getWorkspace().getLocation().toPortableString();
+ logger.trace( "Path :{}, Root :{}", path, root );
+ final File fileChecker = new File( path );
+ String relativePath = path;
+ if ( isAncestor( root, path ) )
+ {
+ relativePath = getRelativePath( root, path );
+ }
+ else if ( fileChecker.isAbsolute() )
+ {
+ return null;
+ }
+
+ final Queue<String> fragments =
+ new LinkedList<String>( Arrays.asList( FilenameUtil.getCanonicalFragments( relativePath ) ) );
+
+ final String projectName = fragments.remove();
+ if ( ".metadata".equals( projectName ) )
+ {
+ return null;
+ }
+ final IProject project = getWorkspace().getProject( projectName );
+ if ( fragments.isEmpty() )
+ {
+ return project;
+ }
+
+ final String fileName = removeLast( fragments );
+
+ IContainer parent = project;
+ if ( !fragments.isEmpty() )
+ {
+ parent = project.getFolder( concatenate( fragments, "/" ) );
+ }
+
+ try {
+ final IResource[] children = parent.members();
+ for ( final IResource chlid : children )
+ {
+ if ( ObjectUtil.equals( fileName, chlid.getName() ) )
+ {
+ return (IContainer) chlid;
+ }
+ }
+ fragments.add( fileName );
+ final String relativeFile = concatenate( fragments, "/" );
+ return project.getFolder( relativeFile );
+ } catch (
+ CoreException e
+ )
+ {
+ }
+ return null;
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#getCurrentWorkingDirectory()
+ */
+ @Override
+ public
+ String
+ getCurrentWorkingDirectory()
+ {
+ return getWorkspace().getLocation().toPortableString();
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#setCurrentWorkingDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ setCurrentWorkingDirectory(
+ final String cwd
+ )
+ {
+ throw new UnsupportedOperationException();
+
+ }
+
+ @Override
+ public
+ void
+ makeDirectory(
+ final String path
+ )
+ throws IOException
+ {
+ final File file = new File( path );
+ if ( file.isAbsolute() )
+ {
+ super.makeDirectory( path );
+ final Path p = new Path( path );
+ try {
+ getWorkspace().getFileForLocation( p ).refreshLocal( -1, new NullProgressMonitor() );
+ } catch ( final CoreException e )
+ {
+ throw new IOException( e );
+ }
+ }
+
+ }
+
+ @Override
+ public
+ void
+ moveDirectory(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void copyDirectory(String source, String target) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void removeDirectory(String path) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public
+ Collection<String>
+ list(
+ final String path
+ )
+ throws IOException
+ {
+
+ final IContainer folder = getFolder( path );
+ if ( null == folder )
+ {
+ return super.list( path );
+ }
+ try {
+ final IResource[] children = folder.members();
+ final ArrayList<String> ret = new ArrayList<String>();
+
+ for ( final IResource child : children )
+ {
+
+ String childPath = getCanonicalForm( child.getLocation().toPortableString() );
+
+ if ( child instanceof IContainer )
+ {
+ childPath = childPath + "/";
+ }
+
+ if ( childPath.startsWith( "/" ) )
+ {
+ ret.add( childPath.substring( 1 ) );
+ }
+ else
+ {
+ ret.add( childPath );
+ }
+ }
+
+ logger.trace( "Children :{}", ret );
+ return ret;
+ }
+ catch (
+ final CoreException e
+ )
+ {
+ throw new IOException( e );
+ }
+ }
+
+ @Override
+ public void write(String path, InputStream out) throws IOException {
+ logger.trace( "Path :{}", path );
+ final IResource file = getFile( path );
+ final IFile f = (IFile) file.getAdapter( IFile.class );
+
+ try {
+ if ( f.exists() )
+ {
+ f.setContents( out, false, false, new NullProgressMonitor() );
+ }
+ else
+ {
+ f.create( out, false, new NullProgressMonitor() );
+ }
+ }
+ catch ( final CoreException e )
+ {
+ throw new IOException( e );
+ }
+ }
+
+ @Override
+ public InputStream read(
+ final String path
+ )
+ throws IOException
+ {
+ final Path p = new Path( path );
+ final IFile eFile = getWorkspace().getFileForLocation( p );
+ if ( null == eFile )
+ {
+ return super.read( path );
+ }
+ try
+ {
+ return eFile.getContents();
+ }
+ catch ( final CoreException e )
+ {
+ throw new IOException( e );
+ }
+ }
+
+ @Override
+ public void moveFile(String source, String target) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void copyFile(String source, String target) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void removeFile(String path) throws IOException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Object get(String path, Attribute name) throws IOException {
+ logger.trace( "Path :{}, Attribute :{}", path, name );
+
+ final IResource file = getFile( path );
+ if ( null == file )
+ {
+ return super.get( path, name );
+ }
+
+ if ( Attribute.TYPE.equals( name ) )
+ {
+ if ( file instanceof IContainer )
+ {
+ return Type.DIRECTORY;
+ }
+ else if ( file instanceof IFile )
+ {
+ return Type.FILE;
+ }
+ }
+ else if ( Attribute.EXISTS.equals( name ) )
+ {
+ return file.exists();
+
+ }
+ else if ( Attribute.PATH.equals( name ) )
+ {
+ return file.getLocation().toPortableString();
+ }
+ else if ( Attribute.URI.equals( name ) || Attribute.URL.equals( name ) )
+ {
+ return file.getLocationURI().toURL().toString();
+ }
+ else if ( Attribute.MODIFIED.equals( name ) )
+ {
+ return file.getLocalTimeStamp();
+ }
+ else if ( Attribute.HIDDEN.equals( name ) )
+ {
+ return file.isHidden();
+ }
+ else if ( Attribute.READABLE.equals( name ) )
+ {
+ return file.isAccessible();
+ }
+ else if ( Attribute.WRITABLE.equals( name ) )
+ {
+ return file.isAccessible();
+ }
+ throw new IOException( path + "'s Unknown attribute :" + name );
+ }
+
+ @Override
+ public void set(String path, Attribute name, Object value)
+ throws IOException {
+ if ( Attribute.QUALIFIED.equals( name ) )
+ {
+// signatureFile.setPersistentProperty(SignatureUtility.stateQualifiedName, "false"); //$NON-NLS-1$
+ return ;
+ }
+
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + "@" + Integer.toHexString( hashCode() ).substring( 0, 4 );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/FileHandler.java b/org.tizen.common/src/org/tizen/common/file/FileHandler.java
new file mode 100644
index 000000000..61d7a81b1
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/FileHandler.java
@@ -0,0 +1,235 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+
+/**
+ * <p>
+ * FileHandler.
+ *
+ * Class to handle file system as abstract api
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+FileHandler
+{
+ /**
+ * <p>
+ * Attribute.
+ *
+ * File attribute
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+ enum Attribute
+ {
+ CWD, // Current Working Directory
+ PATH, // Abstract canonical path
+ TYPE, // Type( FILE / DIRECTORY / UNKNOWN )
+ EXISTS, // true / false
+ READABLE, // true / false
+ WRITABLE, // true / false
+ HIDDEN, // true / false
+ READONLY, // true / false
+ MODIFIED, // long
+ URI, // String
+ URL, // String
+ QUALIFIED,
+ CUSTOM
+ }
+
+ /**
+ * <p>
+ * Type.
+ *
+ * Value of {@link Attribute#TYPE}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+ enum Type
+ {
+ FILE,
+ DIRECTORY,
+ UNKNOWN
+ }
+
+ /**
+ * Return cwd, abbreviating current working directory
+ *
+ * @return current working directory
+ */
+ String getCurrentWorkingDirectory();
+
+ /**
+ * Change current working directory to <code>cwd</code>
+ *
+ * @param cwd new current working directory
+ */
+ void setCurrentWorkingDirectory( final String cwd );
+
+ /* Directory */
+ /**
+ * Make new directory with <code>path</code>
+ *
+ * @param path path to directory
+ *
+ * @throws IOException If exception occured in making a directory
+ */
+ void makeDirectory( String path ) throws IOException;
+
+ /**
+ * Move <code>source</code> directory to <code>target</code>
+ *
+ * @param source directory path to move
+ * @param target path to move to
+ *
+ * @throws IOException If exception occured in moving a directory
+ */
+ void moveDirectory( String source, String target ) throws IOException;
+
+ /**
+ * Copy <code>source</code> directory to <code>target</code>
+ *
+ * @param source directory path to copy
+ * @param target path to copy to
+ *
+ * @throws IOException If exception occured in copying a directory
+ */
+ void copyDirectory( String source, String target ) throws IOException;
+
+ /**
+ * Delete <code>path</code> directory
+ *
+ * @param path directory path to delete
+ *
+ * @throws IOException If exception occured in deleting a directory
+ */
+ void removeDirectory( String path ) throws IOException;
+
+ /**
+ * List child directory and file in <code>path</code>
+ *
+ * @param path directory path
+ * @return child directory and file's path
+ *
+ * @throws IOException If exception occured in list child in directory
+ */
+ Collection<String> list( String path ) throws IOException;
+
+ /* File */
+ /**
+ * Save file in <code>path</code> using <code>out</code>
+ *
+ * @param path file path to write
+ * @param out {@link InputStream} to provide contents
+ *
+ * @throws IOException If exception occured in saving
+ */
+ void write( String path, InputStream out ) throws IOException;
+
+ /**
+ * Return {@link InputStream} to provice file contents
+ *
+ * @param path file path to read
+ * @return
+ * @throws IOException
+ */
+ InputStream read( String path ) throws IOException;
+
+ /**
+ * Move <code>source</code> file to <code>target</code>
+ *
+ * @param source file path to move
+ * @param target path to move to
+ *
+ * @throws IOException If exception occured in moving a file
+ */
+ void moveFile( String source, String target ) throws IOException;
+
+ /**
+ * Copy <code>source</code> file to <code>target</code>
+ *
+ * @param source file path to copy
+ * @param target path to copy to
+ *
+ * @throws IOException If exception occured in copying a file
+ */
+ void copyFile( String source, String target ) throws IOException;
+
+ /**
+ * Delete file in <code>path</code>
+ *
+ * @param path file path
+ *
+ * @throws IOException If exception occured in deletion
+ */
+ void removeFile( String path ) throws IOException;
+
+ /**
+ * Return <code>path</code>'s attribute value having <code>name</code> as attribute name
+ *
+ * @param path file path
+ * @param name attribute name
+ *
+ * @return attribute value
+ *
+ * @throws IOException If exception occured in reading attribute
+ */
+ Object get( final String path, Attribute name ) throws IOException;
+
+ /**
+ * Check if <code>path</code> file's attribute <code>name</code> is <code>true</code>
+ *
+ * @param path file path to check
+ * @param name attribute name
+ *
+ * @return boolean value if thread is <code>name</code> attribute
+ *
+ * @throws IOException If exception occured in reading attribute
+ */
+ boolean is( final String path, Attribute name ) throws IOException;
+
+ /**
+ * Set <code>path</code> file's attribute <code>name</code> as <code>value</code>
+ *
+ * @param path file path
+ * @param name attribute anme
+ * @param value attribute value
+ *
+ * @throws IOException If exception occured in change file attribute
+ *
+ * @see {@link Attribute}
+ */
+ void set( final String path, Attribute name, Object value ) throws IOException;
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/Filter.java b/org.tizen.common/src/org/tizen/common/file/Filter.java
new file mode 100644
index 000000000..17af932db
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/Filter.java
@@ -0,0 +1,48 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+/**
+ * <p>
+ * Filter.
+ *
+ * Object to check if path is valid
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface Filter
+{
+ /**
+ * Check and return if <code>path</code> is valid when current working directory is <code>cwd</code>
+ *
+ * @param cwd current working directory
+ * @param path file path
+ *
+ * @return boolean value of validation
+ */
+ boolean accept( final String cwd, final String path );
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/PatternFilter.java b/org.tizen.common/src/org/tizen/common/file/PatternFilter.java
new file mode 100644
index 000000000..f0600870e
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/PatternFilter.java
@@ -0,0 +1,77 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+/**
+ * <p>
+ * PatternFilter.
+ *
+ * {@link Filter} using pattern
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+PatternFilter
+{
+ /**
+ * Pattern string
+ */
+ protected String pattern = "*";
+
+ /**
+ * Return pattern
+ *
+ * @return pattern
+ *
+ * {@link #pattern}
+ */
+ public
+ String
+ getPattern()
+ {
+ return this.pattern;
+ }
+
+ /**
+ * Set pattern
+ *
+ * @param pattern pattern to set
+ */
+ public
+ void
+ setPattern(
+ final String pattern
+ )
+ {
+ if ( null == pattern )
+ {
+ throw new NullPointerException();
+ }
+ this.pattern = pattern;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/SimpleFileFilter.java b/org.tizen.common/src/org/tizen/common/file/SimpleFileFilter.java
new file mode 100644
index 000000000..efd37f599
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/SimpleFileFilter.java
@@ -0,0 +1,193 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.util.CollectionUtil;
+
+/**
+ * <p>
+ * SimpleFileFilter.
+ *
+ * File filter using including filter and excluding filter
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+SimpleFileFilter
+implements Filter
+{
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Including filters
+ */
+ protected List<Filter> includes = new ArrayList<Filter>();
+
+ /**
+ * Excluding filters
+ */
+ protected List<Filter> excludes = new ArrayList<Filter>();
+
+ // Hiding collection
+ /**
+ * Clear including filters
+ */
+ public
+ void
+ clearIncludes()
+ {
+ includes.clear();
+ }
+
+ /**
+ * Set <code>filters</code> including filters
+ *
+ * @param filters {@link Filter}s to set
+ */
+ public
+ void
+ setIncludes(
+ final Filter... filters
+ )
+ {
+ clearIncludes();
+ addIncludes( filters );
+ }
+
+ /**
+ * Add <code>filters</code> to including filters
+ *
+ * @param filters {@link Filter}s to add
+ */
+ public
+ void
+ addIncludes(
+ final Filter... filters
+ )
+ {
+ for( final Filter filter : filters )
+ {
+ includes.add( filter );
+ }
+ logger.debug( "Include filters[{}] added", CollectionUtil.toString( filters ) );
+ }
+
+ /**
+ * Clear excluding filters
+ */
+ public
+ void
+ clearExcludes()
+ {
+ excludes.clear();
+ }
+
+ /**
+ * Set {@link Filter}s as excluding filters
+ * @param filters
+ */
+ public
+ void
+ setExcludes(
+ final Filter... filters
+ )
+ {
+ clearExcludes();
+ addExcludes( filters );
+ }
+
+ /**
+ * Add <code>filters</code> to excluding filters
+ *
+ * @param filters {@link Filter}s to add
+ */
+ public
+ void
+ addExcludes(
+ final Filter... filters
+ )
+ {
+ for( final Filter filter : filters )
+ {
+ excludes.add( filter );
+ }
+ logger.debug( "Excludes filters[{}] added", CollectionUtil.toString( filters ) );
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.Filter#accept(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ boolean
+ accept(
+ final String cwd,
+ final String path
+ )
+ {
+ logger.trace( "Current working directory :{}, Path :{}", cwd, path );
+ logger.trace( "Excluding filters :{}", excludes );
+ for ( final Filter filter : excludes )
+ {
+ if ( filter.accept( cwd, path ) )
+ {
+ logger.debug( "Deny because of {}", filter );
+ return false;
+ }
+ }
+
+ logger.trace( "Including filters :{}", excludes );
+ for ( final Filter filter : includes )
+ {
+ if ( filter.accept( cwd, path ) )
+ {
+ logger.debug( "Accept because of {}", filter );
+ return true;
+ }
+ }
+
+ if ( includes.isEmpty() )
+ {
+ return true;
+ }
+ else if ( excludes.isEmpty() )
+ {
+ return false;
+ }
+ throw new IllegalStateException( "Include and Exclude rule is invalid" );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/StandardFileHandler.java b/org.tizen.common/src/org/tizen/common/file/StandardFileHandler.java
new file mode 100755
index 000000000..a0b852e84
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/StandardFileHandler.java
@@ -0,0 +1,394 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+package org.tizen.common.file;
+
+import static org.tizen.common.util.FilenameUtil.getCanonicalForm;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.tizen.common.util.IOUtil;
+
+/**
+ * <p>
+ * StandardFileHandler.
+ *
+ * {@link FileHandler} to use java.io package api like {@link File}, {@link FileInputStream} and {@link FileOutputStream}
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+StandardFileHandler
+extends AbstractFileHandler
+{
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#getCurrentWorkingDirectory()
+ */
+ @Override
+ public
+ String
+ getCurrentWorkingDirectory()
+ {
+ return new File( "." ).getAbsolutePath();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#setCurrentWorkingDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ setCurrentWorkingDirectory(String cwd) {
+ throw new UnsupportedOperationException();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#makeDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ makeDirectory(
+ final String path
+ )
+ throws IOException
+ {
+ new File( path ).mkdir();
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#moveDirectory(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ moveDirectory(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final File file = new File( source );
+ if ( !file.isDirectory() )
+ {
+ throw new IOException();
+ }
+ file.renameTo( new File( target ) );
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#copyDirectory(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ copyDirectory(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ throw new UnsupportedOperationException();
+// final Stack<File> sourceStack = new Stack<File>();
+// final Stack<File> targetStack = new Stack<File>();
+// sourceStack.push( new File(source ) );
+// targetStack.push( new File( target ) );
+//
+// while ( !sourceStack.isEmpty() )
+// {
+// final File sourceFile = sourceStack.pop();
+// final File targetFile = targetStack.pop();
+//
+// if ( sourceFile.isDirectory() )
+// {
+// targetFile.mkdir();
+// for ( final File sourceChild : sourceFile.listFiles() )
+// {
+// sourceStack.push( sourceChild );
+// targetStack.push( new File( targetFile, sourceChild.getName() ) );
+// }
+// }
+// else if ( sourceFile.isFile())
+// {
+// final FileInputStream fileIn = new FileInputStream( sourceFile );
+// final FileOutputStream fileOut = new FileOutputStream( targetFile );
+//
+// IOUtil.redirect( fileIn, fileOut );
+// tryClose( fileOut, fileIn );
+// }
+// else {
+// Logger.error(sourceFile + " is not file or directory");
+// }
+// }
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#removeDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ removeDirectory(
+ final String path
+ )
+ throws IOException
+ {
+ if ( !Type.DIRECTORY.equals( get( path, Attribute.TYPE ) ) )
+ {
+ throw new IOException();
+ }
+
+ for ( final String childPath : list( path ) )
+ {
+ Object type = get( childPath, Attribute.TYPE );
+ if ( Type.DIRECTORY.equals( type ) )
+ {
+ removeDirectory( childPath );
+ }
+ else if ( Type.FILE.equals( type ) )
+ {
+ removeFile( childPath );
+ }
+ }
+
+ new File( path ).delete();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#list(java.lang.String)
+ */
+ @Override
+ public
+ Collection<String>
+ list(
+ final String path
+ )
+ throws IOException
+ {
+ final File file = new File( path );
+ final File[] children = file.listFiles();
+ final ArrayList<String> ret = new ArrayList<String>();
+ for ( final File child : children )
+ {
+ ret.add( getCanonicalForm( child.getAbsolutePath() ) );
+ }
+
+ return ret;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#write(java.lang.String, java.io.InputStream)
+ */
+ @Override
+ public
+ void
+ write(
+ final String path,
+ final InputStream in
+ )
+ throws IOException
+ {
+ final FileOutputStream fileOut = new FileOutputStream( path );
+
+ try
+ {
+ IOUtil.redirect( in, fileOut );
+ }
+ finally
+ {
+ tryClose( fileOut );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#read(java.lang.String)
+ */
+ @Override
+ public
+ InputStream
+ read(
+ final String path
+ )
+ throws IOException
+ {
+ return new FileInputStream( path );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#moveFile(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ moveFile(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final File file = new File( source );
+ if ( !file.isFile() )
+ {
+ throw new IOException();
+ }
+ file.renameTo( new File( target ) );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#copyFile(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ copyFile(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final File file = new File( source );
+ if ( !file.isFile() )
+ {
+ throw new IOException();
+ }
+
+ final FileInputStream sourceIn = new FileInputStream( source );
+ final FileOutputStream targetOut = new FileOutputStream( target );
+ try
+ {
+ IOUtil.redirect( sourceIn, targetOut );
+ }
+ finally
+ {
+ tryClose( targetOut, sourceIn );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#removeFile(java.lang.String)
+ */
+ @Override
+ public
+ void
+ removeFile(
+ final String path
+ )
+ throws IOException
+ {
+ final File file = new File( path );
+ if ( !file.isFile() )
+ {
+ throw new IOException();
+ }
+
+ file.delete();
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#get(java.lang.String, org.tizen.common.file.FileHandler.Attribute)
+ */
+ @Override
+ public
+ Object
+ get(
+ final String path,
+ final Attribute name
+ )
+ throws IOException
+ {
+ logger.trace( "Path :{}, Attribute :{}", path, name );
+
+ final File file = new File( path );
+
+ if ( Attribute.TYPE.equals( name ) )
+ {
+ if ( file.isDirectory() )
+ {
+ return Type.DIRECTORY;
+ }
+ else if ( file.isFile() )
+ {
+ return Type.FILE;
+ }
+ }
+ else if ( Attribute.EXISTS.equals( name ) )
+ {
+ return file.exists();
+
+ }
+ else if ( Attribute.PATH.equals( name ) )
+ {
+ return file.getCanonicalPath();
+ }
+ else if ( Attribute.URI.equals( name ) || Attribute.URL.equals( name ) )
+ {
+ return file.toURI().toURL().toString();
+ }
+ else if ( Attribute.MODIFIED.equals( name ) )
+ {
+ return file.lastModified();
+ }
+ else if ( Attribute.HIDDEN.equals( name ) )
+ {
+ return file.isHidden();
+ }
+ else if ( Attribute.READABLE.equals( name ) )
+ {
+ return file.canRead();
+ }
+ else if ( Attribute.WRITABLE.equals( name ) )
+ {
+ return file.canWrite();
+ }
+ throw new IOException( path + "'s Unknown attribute :" + name );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#set(java.lang.String, org.tizen.common.file.FileHandler.Attribute, java.lang.Object)
+ */
+ @Override
+ public void
+ set(
+ final String path,
+ final Attribute name,
+ final Object value
+ )
+ throws IOException
+ {
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/VirtualFileHandler.java b/org.tizen.common/src/org/tizen/common/file/VirtualFileHandler.java
new file mode 100644
index 000000000..c35f4d084
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/VirtualFileHandler.java
@@ -0,0 +1,798 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import static org.tizen.common.util.ArrayUtil.size;
+import static org.tizen.common.util.FilenameUtil.SEPARATOR_DIRECTORY;
+import static org.tizen.common.util.FilenameUtil.addTailingPath;
+import static org.tizen.common.util.FilenameUtil.getCanonicalFragments;
+import static org.tizen.common.util.FilenameUtil.getFilename;
+import static org.tizen.common.util.FilenameUtil.removeTailingPath;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.util.IOUtil;
+import org.tizen.common.util.StringUtil;
+
+/**
+ * <p>
+ * VirtualFileHandler.
+ *
+ * {@link FileHandler} to handling in memory
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+VirtualFileHandler
+extends AbstractFileHandler
+{
+
+ /**
+ * <p>
+ * File.
+ *
+ * File contents container
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+ private class
+ File
+ implements Cloneable
+ {
+ /**
+ * File name
+ */
+ String name;
+
+ /**
+ * File contents
+ */
+ byte[] contents;
+
+ /**
+ * File attributes
+ */
+ HashMap<Attribute, Object> attr = new HashMap<Attribute, Object>();
+
+ /**
+ * Default constructor
+ */
+ public File()
+ {
+ }
+
+ /**
+ * Constructor with name and contents
+ *
+ * @param name file name
+ * @param contents file contents
+ */
+ public
+ File(
+ final String name,
+ final byte[] contents
+ )
+ {
+ this.name = name;
+ this.contents = contents;
+ }
+
+ /**
+ * Return file name
+ *
+ * @return file name
+ */
+ public
+ String
+ getName()
+ {
+ return this.name;
+ }
+
+ /**
+ * Return file contents
+ *
+ * @return file contents
+ */
+ public
+ byte[] getContents()
+ {
+ return this.contents;
+ }
+
+ /**
+ * Set <code>contents</code> as file contents
+ *
+ * @param contents new file contents
+ */
+ public
+ void
+ setContents(
+ final byte[] contents
+ )
+ {
+ this.contents = contents;
+ }
+
+ /**
+ * Set file attribute value whose name is <code>name</code> as <code>value</code>
+ *
+ * @param name attribute name
+ * @param value attribute value
+ */
+ public
+ void
+ setAttribute(
+ final Attribute name,
+ final Object value
+ )
+ {
+ attr.put( name, value );
+ }
+ /**
+ * Return file attribute value whose name is <code>name</code>
+ *
+ * @param name attribute name
+ *
+ * @return attribute value
+ */
+ public
+ Object
+ getAttribute(
+ final Attribute name
+ )
+ {
+ return attr.get( name );
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ @Override
+ public
+ Object
+ clone()
+ {
+ final File file = new File();
+ file.name = this.name;
+ file.contents = this.contents;
+ return file;
+ }
+
+ }
+
+ /**
+ * <p>
+ * Directory.
+ *
+ * Directory in memory
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+ class Directory
+ extends File
+ implements Cloneable
+ {
+ /**
+ * Child files & directories
+ */
+ protected final HashMap<String, File> name2file = new HashMap<String, File>();
+
+ /**
+ * Default constructor
+ */
+ public Directory()
+ {
+ }
+
+ /**
+ * Constructor with directory name
+ *
+ * @param name directory name
+ */
+ public
+ Directory(
+ final String name
+ )
+ {
+ super( name, null );
+ }
+
+ /**
+ * Return child file whose name is <code>name</code>
+ *
+ * @param name file name
+ *
+ * @return {@link File}
+ */
+ public
+ File
+ get(
+ final String name
+ )
+ {
+ return name2file.get( name );
+ }
+
+ /**
+ * Delete child file whose name is <code>name</code>
+ *
+ * @param name file name
+ *
+ * @return file to be deleted
+ */
+ public
+ File
+ remove(
+ final String name
+ )
+ {
+ return name2file.remove( name );
+ }
+
+ /**
+ * Add new file whose name is <code>contents<code> and whose contents is <code>contents</code>
+ *
+ * @param name file name
+ * @param contents file contents
+ */
+ public
+ void
+ add(
+ final String name,
+ final byte[] contents
+ )
+ {
+ name2file.put( name, new File( name, contents ) );
+ }
+
+ /**
+ * Add directory whose name is <code>name</code>
+ *
+ * @param name directory name
+ */
+ public
+ void
+ add(
+ final String name
+ )
+ {
+ name2file.put( name, new Directory( name ) );
+ }
+
+ /**
+ * Add <code>file</code>
+ *
+ * @param file file or directory to add
+ */
+ public
+ void
+ add(
+ final File file
+ )
+ {
+ name2file.put( file.getName(), file );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.VirtualFileHandler.File#clone()
+ */
+ @Override
+ public
+ Object
+ clone()
+ {
+ final Directory dir = new Directory();
+ dir.contents = this.contents;
+ dir.name = this.name;
+ for ( final String name : name2file.keySet() )
+ {
+ name2file.put( name, (File) name2file.get( name ).clone() );
+ }
+
+ return dir;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ return name2file.keySet().toString();
+ }
+ }
+
+ /**
+ * Prefix abstract path
+ */
+ protected static final String ROOT_PREFIX = "/";
+
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Root directory
+ */
+ protected final Directory root = new Directory();
+
+ /**
+ * Current working directory
+ */
+ protected String cwd = "/";
+
+ /**
+ * Return {@link File} matching with <code>path</code>
+ *
+ * @param path file path
+ * @return {@link File} matching with <code>path</code>
+ *
+ * @throws IOException If file is not accessible
+ */
+ protected
+ File
+ getFile(
+ final String path
+ )
+ throws IOException
+ {
+ logger.trace( "Path :{}", path );
+
+ final String[] fragments = getCanonicalFragments( path );
+
+ File iter = root;
+ for ( int i = 0, n = fragments.length ; i < n ; ++i )
+ {
+ Directory dir = (Directory) iter;
+ iter = dir.get( fragments[i] );
+ if ( null == iter )
+ {
+ logger.debug( "fragment :{}", fragments[i] );
+ logger.debug( "in-processing directory :{}", dir );
+
+ throw new IOException( "Can't access " + path );
+ }
+ }
+
+ return iter;
+ }
+
+ /**
+ * Return parent directory of file matching with <code>path</code>
+ * @param path file path
+ *
+ * @return parent directory
+ *
+ * @throws IOException If file or directory is not accessible
+ */
+ public
+ Directory
+ getParent(
+ final String path
+ )
+ throws IOException
+ {
+ final File parent = getFile( removeTailingPath( path, 1 ) );
+ if ( !( parent instanceof Directory ) )
+ {
+ throw new IOException();
+ }
+
+ return (Directory) parent;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#makeDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ makeDirectory(
+ final String path
+ )
+ throws IOException
+ {
+ final Directory parent = getParent( path );
+ final String dirName = getFilename( path );
+ parent.add( dirName );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#moveDirectory(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ moveDirectory(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final String filename = getFilename( source );
+
+ final Directory parent = getParent( source );
+ final File file = parent.get( filename );
+ if ( !( file instanceof Directory ) )
+ {
+ throw new IOException();
+ }
+ final Directory newParent = (Directory) getFile( target );
+ newParent.add( newParent.remove( filename ) );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#copyDirectory(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ copyDirectory(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final Directory dir = (Directory) getFile( source );
+ final Directory targetDir = (Directory) getFile( target );
+
+ targetDir.add( (File) dir.clone() );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#removeDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ removeDirectory(
+ final String path
+ )
+ throws IOException
+ {
+ final Directory dir = getParent( path );
+ final String name = getFilename( path );
+ dir.remove( name );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#list(java.lang.String)
+ */
+ @Override
+ public
+ Collection<String>
+ list(
+ final String path
+ )
+ throws IOException
+ {
+ final Directory dir = (Directory) getFile( path );
+ final Collection<String> childNames = dir.name2file.keySet();
+ logger.trace( "Directory[{}]'s child :{}", path, childNames );
+
+ final ArrayList<String> fullNames = new ArrayList<String>();
+
+ for ( final String name : dir.name2file.keySet() )
+ {
+ fullNames.add( addTailingPath( path, name ) );
+ }
+
+ logger.debug( "Fullnames :\n{}", fullNames );
+ return fullNames;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#write(java.lang.String, java.io.InputStream)
+ */
+ @Override
+ public
+ void
+ write(
+ final String path,
+ final InputStream in
+ )
+ throws IOException
+ {
+ final Directory parent = getParent( path );
+ if ( !(parent instanceof Directory ) )
+ {
+ throw new IOException();
+ }
+
+ final String filename = getFilename( path );
+
+ File file = parent.get( filename );
+
+ if ( file instanceof Directory )
+ {
+ throw new IOException();
+ }
+ if ( null == file )
+ {
+ file = new File( getFilename( path ), null );
+ }
+ getParent( path ).add( file );
+
+ final byte[] contents = IOUtil.getBytes( in );
+
+ if ( logger.isTraceEnabled() )
+ {
+ int nSize = size( contents );
+ logger.trace(
+ "Save file[{}] :{} byte(s)\n{}",
+ new Object[] {
+ path,
+ nSize,
+ StringUtil.text2hexa( contents, 0, Math.min( 64, size( contents ) ) ) + ( (64 < size( contents ) )?"...":"" )
+ }
+ );
+ }
+
+ file.setContents( contents );
+ }
+
+ /**
+ * write <code>contents</code> to file with <code>path</code>
+ *
+ * @param path file path
+ * @param contents file contents
+ *
+ * @throws IOException If file can't be writable
+ *
+ * @see {@link #write(String, InputStream)}
+ */
+ public
+ void
+ write(
+ final String path,
+ final String contents
+ )
+ throws IOException
+ {
+ logger.trace( "Save file :{}\n{}", path, contents );
+ final InputStream in = new ByteArrayInputStream( (null==contents)?(new byte[0]):contents.getBytes() );
+ try
+ {
+ write( path, in );
+ }
+ finally
+ {
+ tryClose( in );
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#read(java.lang.String)
+ */
+ @Override
+ public
+ InputStream
+ read(
+ final String path
+ )
+ throws IOException
+ {
+ final File file = getFile( path );
+ if ( file instanceof Directory )
+ {
+ throw new IOException();
+ }
+
+ return new ByteArrayInputStream( file.contents );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#moveFile(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ moveFile(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final Directory directory = getParent( source );
+ final String fileName = getFilename( source );
+ final File file = directory.remove( fileName );
+ if ( null == file )
+ {
+ throw new IOException();
+ }
+
+ final Directory targetDirectory = (Directory) getFile( target );
+ targetDirectory.add( file );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#copyFile(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ void
+ copyFile(
+ final String source,
+ final String target
+ )
+ throws IOException
+ {
+ final Directory directory = getParent( source );
+ final String fileName = getFilename( source );
+ final File file = directory.get( fileName );
+ if ( null == file )
+ {
+ throw new IOException();
+ }
+
+ final Directory targetDirectory = (Directory) getFile( target );
+ targetDirectory.add( (File) file.clone() );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#removeFile(java.lang.String)
+ */
+ @Override
+ public
+ void
+ removeFile(
+ final String path
+ )
+ throws IOException
+ {
+ final File file = getFile( path );
+ if ( file instanceof Directory )
+ {
+ throw new IOException();
+ }
+
+ final Directory directory = getParent( path );
+ final String fileName = getFilename( path );
+ directory.remove( fileName );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#get(java.lang.String, org.tizen.common.file.FileHandler.Attribute)
+ */
+ @Override
+ public
+ Object
+ get(
+ final String path,
+ final Attribute name
+ )
+ throws IOException
+ {
+ File file = null;
+ try {
+ file = getFile( path );
+ } catch ( Throwable e )
+ {
+ }
+ if ( Attribute.TYPE.equals( name ) )
+ {
+ if ( file instanceof Directory )
+ {
+ return Type.DIRECTORY;
+ }
+ else if ( file instanceof File )
+ {
+ return Type.FILE;
+ }
+ }
+ else if ( Attribute.EXISTS.equals( name ) )
+ {
+ return ( null != file );
+
+ }
+ else if ( Attribute.PATH.equals( name ) )
+ {
+ if ( path.startsWith( ROOT_PREFIX ) )
+ {
+ return path;
+ }
+
+ return cwd + SEPARATOR_DIRECTORY + path;
+ }
+ else if ( Attribute.URI.equals( name ) || Attribute.URL.equals( name ) )
+ {
+ return "vf://" + path;
+ }
+ else
+ {
+ file.getAttribute( name );
+ return false;
+ }
+ throw new IOException( path + "'s Unknown attribute :" + name );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#set(java.lang.String, org.tizen.common.file.FileHandler.Attribute, java.lang.Object)
+ */
+ @Override
+ public
+ void
+ set(
+ final String path,
+ final Attribute name,
+ final Object value
+ )
+ throws IOException
+ {
+ File file = null;
+ try {
+ file = getFile( path );
+ } catch ( Throwable e )
+ {
+ }
+ if ( null != file )
+ {
+ file.setAttribute( name, value );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#getCurrentWorkingDirectory()
+ */
+ @Override
+ public
+ String
+ getCurrentWorkingDirectory() {
+ return this.cwd;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.FileHandler#setCurrentWorkingDirectory(java.lang.String)
+ */
+ @Override
+ public
+ void
+ setCurrentWorkingDirectory(
+ final String cwd
+ )
+ {
+ this.cwd = cwd;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/filter/WildCardFilter.java b/org.tizen.common/src/org/tizen/common/file/filter/WildCardFilter.java
new file mode 100644
index 000000000..04ccb0e57
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/filter/WildCardFilter.java
@@ -0,0 +1,96 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file.filter;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.file.Filter;
+import org.tizen.common.file.PatternFilter;
+import org.tizen.common.util.FilenameUtil;
+
+/**
+ * WildCardFilter
+ *
+ * Filter using wildcard( ?, * )
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+WildCardFilter
+extends PatternFilter
+implements Filter
+{
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Default constructor
+ */
+ public WildCardFilter()
+ {
+ }
+
+ /**
+ * Constructor with pattern
+ *
+ * @param pattern pattern to apply
+ */
+ public WildCardFilter( final String pattern )
+ {
+ setPattern( pattern );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.file.Filter#accept(java.lang.String, java.lang.String)
+ */
+ @Override
+ public
+ boolean
+ accept(
+ final String cwd,
+ final String path
+ )
+ {
+ logger.trace( "Current working directory :{}, Path :{}", cwd, path );
+ final String name = FilenameUtil.getFilename( path );
+ logger.trace( "Name :{}", name );
+ return FilenameUtils.wildcardMatch( name, getPattern() );
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ return WildcardFileFilter.class.getName() + "[" + getPattern() + "]";
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/file/filter/WildCardFilterFactory.java b/org.tizen.common/src/org/tizen/common/file/filter/WildCardFilterFactory.java
new file mode 100644
index 000000000..2cafcbfb9
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/file/filter/WildCardFilterFactory.java
@@ -0,0 +1,60 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file.filter;
+
+import org.tizen.common.FactoryWithArgument;
+import org.tizen.common.file.Filter;
+
+/**
+ * <p>
+ * WildCardFilterFactory.
+ *
+ * Factory to create {@link WildCardFilter} for pattern
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+WildCardFilterFactory
+implements FactoryWithArgument<Filter, String>
+{
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.FactoryWithArgument#create(java.lang.Object)
+ */
+ @Override
+ public
+ Filter
+ create(
+ final String arg
+ )
+ {
+ final WildCardFilter filter = new WildCardFilter();
+ filter.setPattern( arg );
+ return filter;
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/handler/ClearHandler.java b/org.tizen.common/src/org/tizen/common/handler/ClearHandler.java
deleted file mode 100644
index ba8c72731..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/ClearHandler.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.tizen.common.manager.StatusLineMessageManager;
-import org.tizen.common.model.ITableModel;
-
-
-
-public class ClearHandler extends AbstractHandler {
- private IViewPart part;
- private TableViewer viewer;
- private StatusLineMessageManager statusLine;
-
- private String message = Messages.ClearHandler_0;
-
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- part = (IViewPart)HandlerUtil.getActivePart(event);
- viewer = (TableViewer)part.getSite().getSelectionProvider();
- statusLine = new StatusLineMessageManager(part);
-
- clearData();
- return null;
- }
-
- private void clearData() throws ExecutionException {
- ITableModel model = (ITableModel)viewer.getInput();
- model.clear();
- viewer.refresh();
- statusLine.setMessage(message);
- }
-
-
-}
-
diff --git a/org.tizen.common/src/org/tizen/common/handler/ClipboardHandler.java b/org.tizen.common/src/org/tizen/common/handler/ClipboardHandler.java
deleted file mode 100644
index e31e5eed2..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/ClipboardHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-/**
- * Superclass for clipboard related handlers providing safe creation and
- * disposal of the {@link Clipboard}.
- */
-public abstract class ClipboardHandler extends AbstractHandler {
- public Object execute(ExecutionEvent event) throws ExecutionException {
- Clipboard clipboard = new Clipboard(HandlerUtil.getActiveShell(event)
- .getDisplay());
- try {
- return execute(event, clipboard);
- } finally {
- clipboard.dispose();
- }
- }
-
- protected abstract Object execute(ExecutionEvent event, Clipboard clipboard)
- throws ExecutionException;
-} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/handler/CopyHandler.java b/org.tizen.common/src/org/tizen/common/handler/CopyHandler.java
deleted file mode 100644
index 54d604f79..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/CopyHandler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.SWTError;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.ui.part.ResourceTransfer;
-
-/**
- * Copy each currently selected object in the Favorites view to the clipboard.
- */
-public class CopyHandler extends ClipboardHandler {
- /**
- * Called by the superclass {@link #execute(ExecutionEvent)} method so that
- * this method can concentrate on the operation and does not have to manage
- * clipboard creation and disposal.
- */
- public Object execute(ExecutionEvent event, Clipboard clipboard)
- throws ExecutionException {
- ISelection selection = HandlerUtil.getCurrentSelection(event);
- if (selection instanceof IStructuredSelection) {
- Object[] objects = ((IStructuredSelection) selection).toArray();
- if (objects.length > 0) {
- try {
- clipboard.setContents(new Object[] { asResources(objects),
- asText(objects), }, new Transfer[] {
- ResourceTransfer.getInstance(),
- TextTransfer.getInstance(), });
- } catch (SWTError error) {
- // Copy to clipboard failed.
- // This happens when another application
- // is accessing the clipboard while we copy.
- // Ignore the error.
- }
- }
- }
- return null;
- }
-
- public static IResource[] asResources(Object[] objects) {
- Collection<IResource> resources = new ArrayList<IResource>(
- objects.length);
- for (int i = 0; i < objects.length; i++) {
- Object each = objects[i];
- if (each instanceof IAdaptable) {
- IResource res = (IResource) ((IAdaptable) each)
- .getAdapter(IResource.class);
- if (res != null)
- resources.add(res);
- }
- }
- return resources.toArray(new IResource[resources.size()]);
- }
-
- public static String asText(Object[] objects) {
- StringBuffer buf = new StringBuffer();
- for (int i = 0; i < objects.length; i++) {
- Object each = objects[i];
- if (each != null) {
- buf.append(each.toString());
- }
- buf.append(System.getProperty("line.separator")); //$NON-NLS-1$
- }
- return buf.toString();
- }
-}
diff --git a/org.tizen.common/src/org/tizen/common/handler/Messages.java b/org.tizen.common/src/org/tizen/common/handler/Messages.java
deleted file mode 100644
index 7cb9e48ae..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/Messages.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS {
- private static final String BUNDLE_NAME = "org.tizen.common.handler.messages"; //$NON-NLS-1$
- public static String ClearHandler_0;
- public static String OpenFileHandler_0;
- public static String OpenFileHandler_2;
- public static String OpenFileHandler_3;
- public static String SaveFileHandler_0;
- public static String SaveFileHandler_1;
- public static String SaveFileHandler_11;
- public static String SaveFileHandler_12;
- public static String SaveFileHandler_4;
- public static String SaveFileHandler_5;
- static {
- // initialize resource bundle
- NLS.initializeMessages(BUNDLE_NAME, Messages.class);
- }
-
- private Messages() {
- }
-}
diff --git a/org.tizen.common/src/org/tizen/common/handler/OpenFileHandler.java b/org.tizen.common/src/org/tizen/common/handler/OpenFileHandler.java
deleted file mode 100644
index f97b3e066..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/OpenFileHandler.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.filesystem.EFS;
-import org.eclipse.core.filesystem.IFileInfo;
-import org.eclipse.core.filesystem.IFileStore;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.eclipse.ui.ide.IDE;
-import org.tizen.common.manager.StatusLineMessageManager;
-
-
-
-public class OpenFileHandler extends AbstractHandler {
- private IViewPart part;
- private String fileName;
- private Shell shell;
- private IWorkbenchPage page;
- private StatusLineMessageManager statusLine;
-
- private final String title = Messages.OpenFileHandler_0;
- private final String PARAMETER_ID = "org.tizen.common.command.openFile.parameter"; //$NON-NLS-1$
-
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- part = (IViewPart)HandlerUtil.getActivePart(event);
- shell = part.getSite().getShell();
- page = part.getSite().getPage();
- statusLine = new StatusLineMessageManager(part);
-
- String extension = event.getParameter(PARAMETER_ID);
-
- openFile(extension);
- return null;
- }
-
- private void openFile(String extension) throws ExecutionException {
- fileName = getLoadFileName(extension);
- if(fileName==null)
- return;
-
- IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(fileName));
- IFileInfo fileInfo = fileStore.fetchInfo();
- fileInfo.setAttribute(EFS.ATTRIBUTE_READ_ONLY, true);
-
- if( fileInfo.isDirectory()||!fileInfo.exists() ){
- statusLine.setErrorMessage(Messages.OpenFileHandler_2);
- return;
- }
-
- try {
- IDE.openEditorOnFileStore(page, fileStore);
- } catch (PartInitException e) {
- statusLine.setErrorMessage(fileName+ Messages.OpenFileHandler_3);
- return;
- }
-
- }
-
- private String getLoadFileName(String extension) {
- String[] extFilter = {"*."+extension}; //$NON-NLS-1$
-
- FileDialog dialog = new FileDialog(shell, SWT.OPEN);
- dialog.setFilterExtensions(extFilter);
- dialog.setText(title);
- return dialog.open();
- }
-
-}
-
diff --git a/org.tizen.common/src/org/tizen/common/handler/OpenPreferencesHandler.java b/org.tizen.common/src/org/tizen/common/handler/OpenPreferencesHandler.java
deleted file mode 100644
index 32932b811..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/OpenPreferencesHandler.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.dialogs.PreferencesUtil;
-import org.eclipse.ui.handlers.HandlerUtil;
-
-public class OpenPreferencesHandler extends AbstractHandler {
- private IViewPart part;
- private Shell shell;
- private final String PARAMETER_ID = "org.tizen.common.command.setting.parameter"; //$NON-NLS-1$
-
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- part = (IViewPart)HandlerUtil.getActivePart(event);
- shell = part.getSite().getShell();
-
- String preferenceId = event.getParameter(PARAMETER_ID);
- openPreferences(preferenceId);
- return null;
- }
-
- private void openPreferences(String preferenceId) throws ExecutionException {
- PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(shell,
- preferenceId, null, null);
- dialog.open();
- }
-
-
-
-}
-
diff --git a/org.tizen.common/src/org/tizen/common/handler/SaveFileHandler.java b/org.tizen.common/src/org/tizen/common/handler/SaveFileHandler.java
deleted file mode 100644
index c703e302d..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/SaveFileHandler.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.handler;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.tizen.common.manager.StatusLineMessageManager;
-import org.tizen.common.model.ITableModel;
-import org.tizen.common.util.DialogUtil;
-
-
-
-public class SaveFileHandler extends AbstractHandler {
- private IViewPart part;
- private TableViewer viewer;
- private String fileName;
- private Shell shell;
- private StatusLineMessageManager statusLine;
-
- private final String title = Messages.SaveFileHandler_0;
- private final String PARAMETER_ID = "org.tizen.common.command.saveFile.parameter"; //$NON-NLS-1$
-
-
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- part = (IViewPart)HandlerUtil.getActivePart(event);
- shell = part.getSite().getShell();
- statusLine = new StatusLineMessageManager(part);
-
- viewer = (TableViewer)part.getSite().getSelectionProvider();
- String extension = event.getParameter(PARAMETER_ID);
-
- if(!hasRecord())
- return null;
-
- try {
- saveFile(extension);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return null;
- }
-
- private void saveFile(String extension) throws InvocationTargetException, InterruptedException {
- fileName = getSaveFileName(extension);
-
- if(fileName==null)
- return;
-
- if(!fileName.endsWith("."+extension)) //$NON-NLS-1$
- fileName= fileName+"."+extension; //$NON-NLS-1$
-
- if(!(new File(fileName).getParentFile().canWrite())){
- DialogUtil.openErrorDialog(Messages.SaveFileHandler_4);
- return;
- }
-
- part.getSite().getWorkbenchWindow().run(false, false, new IRunnableWithProgress(){
- public void run(IProgressMonitor monitor) {
- monitor.beginTask(Messages.SaveFileHandler_5, 100);
- writeRecord();
- monitor.done();
- }
- });
-
- showRecordCount();
-
- }
-
- private String getSaveFileName(String extension) {
- String[] extFilter = {"*."+extension,"*.*"}; //$NON-NLS-1$ //$NON-NLS-2$
-
- FileDialog dialog = new FileDialog(shell, SWT.SAVE);
- dialog.setFilterExtensions(extFilter);
- dialog.setText(title);
- dialog.setOverwrite(true);
- dialog.setFileName("untitled."+extension); //$NON-NLS-1$
- dialog.setFilterPath(System.getProperty("user.home")); //$NON-NLS-1$
-
- return dialog.open();
- }
-
- private void writeRecord() {
- ITableModel model = (ITableModel) viewer.getInput();
- model.save(fileName);
- }
-
- private void showRecordCount() {
- int size = ((ITableModel) viewer.getInput()).size();
- statusLine.setMessage(Messages.SaveFileHandler_1+size+Messages.SaveFileHandler_11 + fileName);
- }
-
- private boolean hasRecord() {
- int size = ((ITableModel) viewer.getInput()).size();
- if(size==0){
- statusLine.setErrorMessage(Messages.SaveFileHandler_12);
- return false;
- }else
- statusLine.setErrorMessage(""); //$NON-NLS-1$
- return true;
- }
-}
-
diff --git a/org.tizen.common/src/org/tizen/common/handler/messages.properties b/org.tizen.common/src/org/tizen/common/handler/messages.properties
deleted file mode 100644
index f9d98c9af..000000000
--- a/org.tizen.common/src/org/tizen/common/handler/messages.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-ClearHandler_0=All data is cleared
-OpenFileHandler_0=Load File
-OpenFileHandler_2=Input file doesn't exist or isn't a file
-OpenFileHandler_3=isn't opened for internal error
-SaveFileHandler_0=Save File
-SaveFileHandler_1=Total
-SaveFileHandler_11=\ record is saved into
-SaveFileHandler_12=There is no record.
-SaveFileHandler_4=You can store a file into the directory that has write permission. please select another directory
-SaveFileHandler_5=Save File
diff --git a/org.tizen.common/src/org/tizen/common/manager/StatusLineMessageManager.java b/org.tizen.common/src/org/tizen/common/manager/StatusLineMessageManager.java
deleted file mode 100644
index 77d279e10..000000000
--- a/org.tizen.common/src/org/tizen/common/manager/StatusLineMessageManager.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-package org.tizen.common.manager;
-
-import org.eclipse.jface.action.IStatusLineManager;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.IWorkbenchPart;
-
-public class StatusLineMessageManager{
- private IViewPart part;
- private IStatusLineManager manager;
-
- public StatusLineMessageManager(IWorkbenchPart part){
- this.part = (IViewPart)part;
- this.manager = this.part.getViewSite().getActionBars().getStatusLineManager();
- }
-
- public void setErrorMessage(String message){
- manager.setErrorMessage(message);
- }
-
- public void setMessage(String message){
- manager.setMessage(message);
- }
-} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/manager/messages.properties b/org.tizen.common/src/org/tizen/common/manager/messages.properties
deleted file mode 100644
index 19dbd56f4..000000000
--- a/org.tizen.common/src/org/tizen/common/manager/messages.properties
+++ /dev/null
@@ -1 +0,0 @@
-ColorCache_0=Argument must not be null
diff --git a/org.tizen.common/src/org/tizen/common/model/AbstractTableModel.java b/org.tizen.common/src/org/tizen/common/model/AbstractTableModel.java
deleted file mode 100644
index 97555e65e..000000000
--- a/org.tizen.common/src/org/tizen/common/model/AbstractTableModel.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.XMLMemento;
-
-public abstract class AbstractTableModel implements ITableModel {
- private static final String TAG_ROOT = "root"; //$NON-NLS-1$
-
- private Collection<AbstractTableVO> inventory = new ArrayList<AbstractTableVO>();
- protected AbstractTableVO source;
- private boolean isDirty = false;
-
- public AbstractTableModel(AbstractTableVO source) {
- this.source = source;
-
- }
-
-
-
- public ITableVO[] getDatas() {
- if (inventory == null)
- return null;
-
- return inventory.toArray(new AbstractTableVO[inventory.size()]);
- }
-
- public void add(Collection<AbstractTableVO> datas) {
- if (datas == null)
- return;
-
- inventory.addAll(datas);
- }
-
- public int size(){
- return inventory.size();
- }
-
- public void add(AbstractTableVO data) {
- inventory.add(data);
- }
-
- public void remove(Collection<AbstractTableVO> datas) {
- if (datas == null)
- return;
-
- inventory.removeAll(datas);
- }
-
- public void remove(AbstractTableVO data) {
- inventory.remove(data);
- }
-
- public void clear() {
- inventory.clear();
- }
-
- public void load(String fileName) {
- if (inventory==null||source==null)
- return;
-
- FileReader reader = null;
- try {
- reader = new FileReader(new File(fileName));
- load(XMLMemento.createReadRoot(reader));
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (reader != null)
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- private void load(XMLMemento memento) {
- IMemento[] children = memento.getChildren(getSourceName());
- AbstractTableVO data = null;
- String[] fields = source.getColumnNames();
- for (int i = 0; i < children.length; i++) {
- data = source.clone();
- for (int j = 0; j < fields.length; j++) {
- data.setColumnValue(j, children[i].getString(fields[j]));
- }
- add(data);
- }
- }
-
- public void save(String fileName) {
- if (inventory == null || source == null)
- return;
-
- XMLMemento memento = XMLMemento.createWriteRoot(TAG_ROOT);
- save(memento);
- FileWriter writer = null;
- try {
- writer = new FileWriter(fileName);
- memento.save(writer);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- if (writer != null)
- writer.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- private void save(XMLMemento memento) {
- Iterator<AbstractTableVO> iter = inventory.iterator();
- AbstractTableVO data = null;
- String[] fields = null;
-
- while (iter.hasNext()) {
- data = iter.next();
- fields = data.getColumnNames();
- IMemento child = memento.createChild(getSourceName());
- for (int j = 0; j < fields.length; j++) {
- child.putString(
- fields[j],
- String.valueOf(data.getColumnValue(j)));
- }
- }
-
- }
-
- public String getSourceName() {
- return this.source.getClass().getSimpleName();
- }
-
- public boolean isDirty(){
- return this.isDirty;
- }
-
- public synchronized void setDirty(boolean isDirty){
- this.isDirty = isDirty;
- }
-
-}
-
-
diff --git a/org.tizen.common/src/org/tizen/common/model/AbstractTableVO.java b/org.tizen.common/src/org/tizen/common/model/AbstractTableVO.java
deleted file mode 100644
index 8f359a677..000000000
--- a/org.tizen.common/src/org/tizen/common/model/AbstractTableVO.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-public abstract class AbstractTableVO implements ITableVO{
- public abstract String[] getColumnNames();
- public abstract Object getColumnValue(int index);
- public abstract void setColumnValue(int index, Object value);
-
- public AbstractTableVO clone(){
- Object obj = null;
- try{
- obj = super.clone();
- }catch(CloneNotSupportedException e){
-
- }
- return (AbstractTableVO)obj;
- }
-
- public Object getColumnValue(String columnName){
- return getColumnValue(getColumnIndex(columnName));
- }
-
- public String getColumnName(int index){
- String[] columnNames = getColumnNames();
- if(index<0||index>columnNames.length)
- return null;
- else
- return columnNames[index];
- }
-
- public int getColumnIndex(String columnName){
- String[] columnNames = getColumnNames();
- int index =-1;
- for(int i=0;i<columnNames.length;i++){
- if(columnName.equals(columnNames[i])){
- index = i;
- break;
- }
- }
- return index;
- }
-
- @Override
- public String toString() {
- StringBuffer buf = new StringBuffer();
- String[] fields = getColumnNames();
- for (int j = 0; j < fields.length; j++) {
- Object obj = getColumnValue(j);
- buf.append(obj==null?"":String.valueOf(obj)); //$NON-NLS-1$
- if(j<fields.length-1)
- buf.append(","); //$NON-NLS-1$
- }
- return buf.toString();
- }
-
-}
diff --git a/org.tizen.common/src/org/tizen/common/model/AbstractTreeModel.java b/org.tizen.common/src/org/tizen/common/model/AbstractTreeModel.java
deleted file mode 100644
index 0282ddf99..000000000
--- a/org.tizen.common/src/org/tizen/common/model/AbstractTreeModel.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.ui.XMLMemento;
-
-public class AbstractTreeModel implements ITreeModel {
- private static final String TAG_ROOT = "root"; //$NON-NLS-1$
-
- private Collection<ITreeVO> inventory = new ArrayList<ITreeVO>();
- protected ITreeVO source;
- private boolean isDirty = false;
-
- public AbstractTreeModel(ITreeVO source){
-// if(source.getSuperclass() != ITreeVO.class)
- this.source = source;
- }
-
- public ITreeVO[] getDatas() {
- if (inventory == null)
- return null;
-
- return inventory.toArray(new ITreeVO[inventory.size()]);
- }
-
- public void add(Collection<ITreeVO> datas) {
- if (datas == null)
- return;
-
- inventory.addAll(datas);
- }
-
- public int size(){
- return inventory.size();
- }
-
- public void add(ITreeVO data) {
- inventory.add(data);
- }
-
- public void remove(Collection<ITreeVO> datas) {
- if (datas == null)
- return;
-
- inventory.removeAll(datas);
- }
-
- public void remove(ITreeVO data) {
- inventory.remove(data);
- }
-
- public void clear() {
- inventory.clear();
- }
-
- public void load(String fileName) {
- }
-
- private void load(XMLMemento memento) {
- }
-
- public void save(String fileName) {
- }
-
- private void save(XMLMemento memento) {
- }
-
- public String getSourceName() {
- return this.source.getClass().getSimpleName();
- }
-
-
-
-}
-
-
diff --git a/org.tizen.common/src/org/tizen/common/model/AbstractTreeVO.java b/org.tizen.common/src/org/tizen/common/model/AbstractTreeVO.java
deleted file mode 100644
index 8a7c0f050..000000000
--- a/org.tizen.common/src/org/tizen/common/model/AbstractTreeVO.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-import java.util.ArrayList;
-
-public abstract class AbstractTreeVO implements ITreeVO{
-
- private String text;
- private String description;
- private Object data = null;
- private int level = 0;
-
- private AbstractTreeVO parent;
- private ArrayList<AbstractTreeVO> children;
-
- public AbstractTreeVO(AbstractTreeVO parent,String text) {
- this.parent = parent;
- this.text = text;
- this.level = parent==null?1:parent.getLevel()+1;
- if(parent!=null)
- parent.addChild(this);
- children = new ArrayList<AbstractTreeVO>();
- }
-
- public AbstractTreeVO(AbstractTreeVO parent) {
- this(parent,null);
- }
-
- public ITreeVO[] getChildren() {
- return (ITreeVO[])children.toArray(new ITreeVO[children.size()]);
- }
-
- public ITreeVO getParent(){
- return this.parent;
- }
-
- public boolean hasChildren() {
- return children.size()>0;
- }
-
- public int size() {
- return children.size();
- }
-
- public void addChild(ITreeVO child) {
- children.add((AbstractTreeVO)child);
- }
-
- public void removeChild(Object child) {
- children.remove(child);
- }
-
- public String toString() {
- return getText();
- }
-
- public String getText() {
- return text;
- }
-
- public void setText(String text) {
- this.text = text;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public void setData(Object data) {
- this.data = data;
- }
-
- public Object getData(){
- return this.data;
- }
-
- public int getLevel(){
- return this.level;
- }
-
-}
diff --git a/org.tizen.common/src/org/tizen/common/model/ITableModel.java b/org.tizen.common/src/org/tizen/common/model/ITableModel.java
deleted file mode 100644
index e21b41f51..000000000
--- a/org.tizen.common/src/org/tizen/common/model/ITableModel.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-import java.util.Collection;
-
-
-public interface ITableModel
-{
- public void add(AbstractTableVO datas);
- public void add(Collection<AbstractTableVO> datas);
- public void remove(AbstractTableVO datas);
- public void remove(Collection<AbstractTableVO> datas);
- public ITableVO[] getDatas();
- public void load(String fileName);
- public void save(String fileName);
- public void clear();
- public int size();
- public String getSourceName();
- public boolean isDirty();
- public void setDirty(boolean isDirty);
-}
diff --git a/org.tizen.common/src/org/tizen/common/model/ITreeVO.java b/org.tizen.common/src/org/tizen/common/model/ITreeVO.java
deleted file mode 100644
index b0968aaca..000000000
--- a/org.tizen.common/src/org/tizen/common/model/ITreeVO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-public interface ITreeVO extends IVO{
- public ITreeVO[] getChildren();
- public ITreeVO getParent();
- public boolean hasChildren();
- public int size();
- public void addChild(ITreeVO child);
- public void removeChild(Object child) ;
- public String getText();
- public void setText(String text);
- public String getDescription();
- public void setDescription(String description);
- public void setData(Object data);
- public Object getData();
- public int getLevel();
-}
diff --git a/org.tizen.common/src/org/tizen/common/model/IVO.java b/org.tizen.common/src/org/tizen/common/model/IVO.java
deleted file mode 100644
index c49cf134c..000000000
--- a/org.tizen.common/src/org/tizen/common/model/IVO.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-public interface IVO extends Cloneable{
-}
diff --git a/org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.properties b/org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.properties
deleted file mode 100644
index c4856e3d8..000000000
--- a/org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-TizenPreferencePage.0=General settings for Tizen developement:
-TizenPreferencePage.1=SDK Path settings
-TizenPreferencePage.2=Location:
-TizenPreferencePage.3=SDK Update
-TizenPreferencePage.4=Automatically find new updates and notify me
-
diff --git a/org.tizen.common/src/org/tizen/common/properties/InstallPathConfig.java b/org.tizen.common/src/org/tizen/common/properties/InstallPathConfig.java
deleted file mode 100644
index d49b70804..000000000
--- a/org.tizen.common/src/org/tizen/common/properties/InstallPathConfig.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.properties;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-
-import org.tizen.common.util.DialogUtil;
-import org.tizen.common.util.HostUtil;
-import org.tizen.common.util.OSChecker;
-
-
-
-final public class InstallPathConfig {
-
- private static String sdkInstallPath;
- private final static String SDKSUFFIX = ".TizenSDK"+File.separatorChar+"tizensdkpath";
- private final static String EMULATOR_PATH = "Emulator";
- private final static String INSTALLER_PATH = "InstallManager";
-
- // Registry Key
- private static final String REGISTRY_PATH_OF_SHELL_FOLDER = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
- // public static final String REGISTRY_APP_DATA_OF_SHELL_FOLDER = "AppData";
- private static final String REGISTRY_LOCAL_APP_DATA_OF_SHELL_FOLDER = "\"Local AppData\"";
- // Value Column
- private static final String REG_SZ = "REG_SZ";
-
- static {
- // FIXME : don't need the following lines if using environment variable
- String sdkPath;
-
- if (OSChecker.isWindows()) {
- String appdataPath = getRegistryValue(REGISTRY_PATH_OF_SHELL_FOLDER,REGISTRY_LOCAL_APP_DATA_OF_SHELL_FOLDER) ;
- sdkPath = appdataPath + File.separatorChar + SDKSUFFIX;
- loadSdkPath(sdkPath);
- } else if (OSChecker.isLinux() == true || OSChecker.isUnix() == true || OSChecker.isMAC() == true) {
- sdkPath= System.getProperty("user.home") + File.separatorChar + SDKSUFFIX;
- loadSdkPath(sdkPath);
- } else {
- DialogUtil.openMessageDialog(System.getProperty("os.name") + " is not supported currently.");
- System.exit(0);
- }
- }
-
- public static String getEmulatorPath(){
- return sdkInstallPath + File.separatorChar + EMULATOR_PATH;
- }
-
- /**
- * @deprecated Use {@link #getSDKPath()} instead.
- */
- @Deprecated
- public static String getIDEPath() {
- // FIXME : can't help but putting the code due to the Web IDE path , It has to be removed soon.
- return System.getProperty("user.dir");
- }
-
- public static String getSDKPath() {
- return sdkInstallPath;
- }
-
- public static String getInstallManagerPath() {
- return sdkInstallPath + File.separatorChar + INSTALLER_PATH;
- }
-
- private static void loadSdkPath(String sdkPath) {
- if (HostUtil.exists(sdkPath)) {
- String[] fileContent = HostUtil.getContents(sdkPath).split("=");
- if (HostUtil.exists(fileContent[1]))
- sdkInstallPath = fileContent[1];
- else {
- DialogUtil.openMessageDialog("Tizen SDK is not installed propertly.");
- System.exit(0);
- }
- } else {
- DialogUtil.openMessageDialog("Tizen SDK is not installed propertly.");
- System.exit(0);
- }
- }
- private static String getRegistryValue(String node, String key) {
- if (!OSChecker.isWindows())
- return null;
-
- BufferedReader br = null;
- String value = "";
-
- String query = "reg query " + "\"" + node + "\" /v " + key;
- try {
- Process process = Runtime.getRuntime().exec(query);
- String encoding = System.getProperty("sun.jnu.encoding");
- br = new BufferedReader(new InputStreamReader(process.getInputStream(), encoding));
-
- String line = null;
- while((line = br.readLine()) != null) {
- int index = line.indexOf(REG_SZ);
- if (index >= 0) {
- value = line.substring(index + REG_SZ.length()).trim();
- }
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
-
- return value;
- }
-} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/queue/Queue.java b/org.tizen.common/src/org/tizen/common/queue/Queue.java
deleted file mode 100644
index 366aba6dd..000000000
--- a/org.tizen.common/src/org/tizen/common/queue/Queue.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.queue;
-
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-public class Queue<T>{
-
- private ConcurrentLinkedQueue<T> queue = new ConcurrentLinkedQueue<T>();
- private boolean waiting = false;
-
- public synchronized void add(T e){
- queue.add(e);
- if(waiting)
- notify();
- }
-
- public synchronized T poll(){
- while (isEmpty()) {
- try {
- waiting = true;
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- waiting = false;
- return queue.poll();
- }
-
- public synchronized void clear(){
- queue.clear();
- }
-
- public boolean isEmpty() {
- return queue.isEmpty();
- }
-
- public int size() {
- return queue.size();
- }
-
- public synchronized void stop() {
- if (waiting)
- notify();
- }
-
-}
diff --git a/org.tizen.common/src/org/tizen/common/swt/CommonColor.java b/org.tizen.common/src/org/tizen/common/ui/CommonColor.java
index e9e9466ce..702d37745 100644
--- a/org.tizen.common/src/org/tizen/common/swt/CommonColor.java
+++ b/org.tizen.common/src/org/tizen/common/ui/CommonColor.java
@@ -24,20 +24,24 @@
* - S-Core Co., Ltd
*/
-package org.tizen.common.swt;
+package org.tizen.common.ui;
import org.eclipse.swt.graphics.Color;
-import org.eclipse.ui.PlatformUI;
+import org.tizen.common.util.cache.ColorCache;
/**
- * Common SWT Color
+ * Predefined Common SWT Color
+ *
* @author Gyeongseok Seo <gyeongseok.seo@samsung.com>
*
*/
public class CommonColor {
- public static final Color BLACK = new Color(PlatformUI.getWorkbench().getDisplay(), 0, 0, 0);
- public static final Color RED = new Color(PlatformUI.getWorkbench().getDisplay(), 255, 0, 0);
- public static final Color ORANGE_RED = new Color(PlatformUI.getWorkbench().getDisplay(), 255, 69, 0);
- public static final Color ROYAL_BLUE = new Color(PlatformUI.getWorkbench().getDisplay(), 65, 105, 225);
- public static final Color YELLOW_GREEN = new Color(PlatformUI.getWorkbench().getDisplay(), 153, 204, 50);
+ public static final Color BLACK = ColorCache.getBlack();
+ public static final Color RED = ColorCache.getColor( 255, 0, 0 );
+ public static final Color ORANGE_RED = ColorCache.getColor( 255, 69, 0 );
+ public static final Color ROYAL_BLUE = ColorCache.getColor( 65, 105, 225 );
+ public static final Color YELLOW = ColorCache.getColor( 255, 255, 0 );
+ public static final Color LIGHT_YELLOW = ColorCache.getColor( 255, 255, 224 );
+ public static final Color YELLOW_GREEN = ColorCache.getColor( 153, 204, 50 );
+ public static final Color DARK_GOLDENROD = ColorCache.getColor( 184, 134, 11 );
}
diff --git a/org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java b/org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java
new file mode 100644
index 000000000..e49672a67
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/TableToolTipListener.java
@@ -0,0 +1,133 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Ho Namkoong <ho.namkoong@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.ui;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.tizen.common.util.SWTUtil;
+
+/**
+ * TableToolTipListener
+ *
+ * Add tool tip to the table
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+public abstract class TableToolTipListener implements Listener{
+
+ private Shell tip = null;
+ private Label label = null;
+ private Table table = null;
+
+ /**
+ * Gets tooltip text from tableitem.
+ *
+ * @param item table item from which tooltip text is extracted.
+ * @return tooltip text
+ */
+ protected abstract String getLabelText(TableItem item);
+
+ /**
+ * Constructor with target table
+ *
+ * @param table will be added listener.
+ */
+
+ public void setTable(Table table) {
+ this.table = table;
+ }
+
+ @Override
+ public void handleEvent(Event event) {
+ int eventType = event.type;
+
+ if(SWT.MouseMove == eventType || SWT.MouseWheel == eventType || SWT.Dispose == eventType) {
+ if(tip != null) {
+ tip.dispose();
+ tip = null;
+ label = null;
+ return;
+ }
+ }
+ if(SWT.MouseHover == eventType) {
+ TableItem item = this.table.getItem(new Point(event.x, event.y));
+ if(item != null) {
+ if(tip != null && !tip.isDisposed()) {
+ tip.dispose();
+ }
+ tip = new Shell(SWTUtil.getActiveShell(), SWT.ON_TOP | SWT.TOOL);
+ tip.setLayout(new FillLayout());
+
+ label = new Label(tip, SWT.None);
+ label.setText(this.getLabelText(item));
+ label.setData(item);
+
+ label.addListener(SWT.MouseExit, labelListener);
+ label.addListener(SWT.MouseDown, labelListener);
+ label.addListener(SWT.MouseWheel, labelListener);
+
+ Point size = tip.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+ Rectangle rect = item.getBounds(0);
+ Point pt = this.table.toDisplay(rect.x, rect.y);
+ tip.setBounds(pt.x, pt.y, size.x, size.y);
+ tip.setVisible(true);
+ }
+ }
+ }
+
+ final private Listener labelListener = new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ Label label = (Label)event.widget;
+ Shell shell = label.getShell();
+
+ int eventType = event.type;
+ if(SWT.MouseDown == eventType) {
+ if(table != null) {
+ Event e = new Event();
+ e.item = (TableItem) label.getData();
+
+ table.setSelection((TableItem)e.item);
+ table.notifyListeners(SWT.Selection, e);
+ }
+ return;
+ }
+ if(SWT.MouseExit == eventType || SWT.MouseWheel == eventType) {
+ shell.dispose();
+ return;
+ }
+ }
+ };
+}
diff --git a/org.tizen.common/src/org/tizen/common/swt/ClosableTray.java b/org.tizen.common/src/org/tizen/common/ui/dialog/ClosableTray.java
index ec149654f..34d96d075 100644
--- a/org.tizen.common/src/org/tizen/common/swt/ClosableTray.java
+++ b/org.tizen.common/src/org/tizen/common/ui/dialog/ClosableTray.java
@@ -23,7 +23,7 @@
*
*/
-package org.tizen.common.swt;
+package org.tizen.common.ui.dialog;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.ToolBarManager;
@@ -47,6 +47,7 @@ import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
+import org.tizen.common.util.SWTUtil;
/**
@@ -60,7 +61,7 @@ public abstract class ClosableTray extends DialogTray {
private Shell shell;
private void createImages() {
- Display display = Display.getCurrent();
+ Display display = SWTUtil.getDisplay();
int[] shape = new int[] {
3, 3, 5, 3, 7, 5, 8, 5, 10, 3, 12, 3, 12, 5, 10, 7, 10, 8, 12, 10,
12, 12, 10, 12, 8, 10, 7, 10, 5, 12, 3, 12, 3, 10, 5, 8, 5, 7, 3, 5
@@ -169,4 +170,4 @@ public abstract class ClosableTray extends DialogTray {
closeHover.dispose();
}
}
-} \ No newline at end of file
+}
diff --git a/org.tizen.common/src/org/tizen/common/ui/dialog/PasswordInputDialog.java b/org.tizen.common/src/org/tizen/common/ui/dialog/PasswordInputDialog.java
new file mode 100644
index 000000000..0229496b6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/dialog/PasswordInputDialog.java
@@ -0,0 +1,114 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.ui.dialog;
+
+import static org.tizen.common.util.SWTUtil.getActiveShell;
+import static org.tizen.common.util.StringUtil.EMPTY_STRING;
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * <p>
+ * PasswordInputDialog.
+ *
+ * Dialog for password input
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+PasswordInputDialog
+extends InputDialog
+{
+ /**
+ * Constructor with title, message
+ *
+ * @param dialogTitle title of dialog
+ * @param dialogMessage message of dialog
+ *
+ * @see #PasswordInputDialog(Shell, String, String)
+ */
+
+ public
+ PasswordInputDialog(
+ final String dialogTitle,
+ final String dialogMessage
+ )
+ {
+ this( getActiveShell(), dialogTitle, dialogMessage );
+ }
+
+ /**
+ * Constructor with shell, title, message
+ *
+ * @param parentShell parent of dialog shell
+ * @param dialogTitle title of dialog
+ * @param dialogMessage message of dialog
+ *
+ * @see #PasswordInputDialog(Shell, String, String, IInputValidator)
+ */
+ public
+ PasswordInputDialog(
+ final Shell parentShell,
+ final String dialogTitle,
+ final String dialogMessage
+ )
+ {
+ this( parentShell, dialogTitle, dialogMessage, null );
+ }
+
+ /**
+ * Constructor with shell, title, message and input validator
+ *
+ * @param parentShell parent of dialog shell
+ * @param dialogTitle title of dialog
+ * @param dialogMessage message of dialog
+ * @param validator validator for input
+ */
+ public
+ PasswordInputDialog(
+ final Shell parentShell,
+ final String dialogTitle,
+ final String dialogMessage,
+ final IInputValidator validator
+ )
+ {
+ super( parentShell, dialogTitle, dialogMessage, EMPTY_STRING, validator );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.InputDialog#getInputTextStyle()
+ */
+ @Override
+ protected
+ int
+ getInputTextStyle()
+ {
+ return SWT.SINGLE | SWT.BORDER | SWT.PASSWORD;
+ }
+} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/manager/Messages.java b/org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.java
index f5fa5a835..169463a68 100644
--- a/org.tizen.common/src/org/tizen/common/manager/Messages.java
+++ b/org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.java
@@ -22,19 +22,24 @@
* - S-Core Co., Ltd
*
*/
-
-package org.tizen.common.manager;
+package org.tizen.common.ui.page.preference;
import org.eclipse.osgi.util.NLS;
-public class Messages extends NLS {
- private static final String BUNDLE_NAME = "org.tizen.common.manager.messages"; //$NON-NLS-1$
- public static String ColorCache_0;
+public class Messages {
+
+ private static final String BUNDLE_NAME = Messages.class.getName();//$NON-NLS-1$
+
+ public static String DESCRIPTION;
+
+ public static String GROUP1;
+ public static String GROUP2;
+
+ public static String LABEL_LOCATION;
+ public static String LABEL_UPDATE;
+
static {
// initialize resource bundle
- NLS.initializeMessages(BUNDLE_NAME, Messages.class);
- }
-
- private Messages() {
+ NLS.initializeMessages( BUNDLE_NAME, Messages.class );
}
}
diff --git a/org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.properties b/org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.properties
new file mode 100644
index 000000000..b26e800b8
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.properties
@@ -0,0 +1,5 @@
+DESCRIPTION=General settings
+GROUP1=SDK path
+LABEL_LOCATION=Location:
+GROUP2=SDK update
+LABEL_UPDATE=Automatically find new updates at start-up and notify me
diff --git a/org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.java b/org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.java
index e095402de..0672b592b 100644
--- a/org.tizen.common/src/org/tizen/common/preferences/PreferenceMessages.java
+++ b/org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.java
@@ -22,7 +22,7 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.preferences;
+package org.tizen.common.ui.page.preference;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
diff --git a/org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.properties b/org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.properties
new file mode 100644
index 000000000..d91c289b8
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/page/preference/PreferenceMessages.properties
@@ -0,0 +1,5 @@
+TizenPreferencePage.0=General settings
+TizenPreferencePage.1=SDK path
+TizenPreferencePage.2=Location:
+TizenPreferencePage.3=SDK update
+TizenPreferencePage.4=Automatically find new updates at start-up and notify me
diff --git a/org.tizen.common/src/org/tizen/common/preferences/TizenBasePreferencePage.java b/org.tizen.common/src/org/tizen/common/ui/page/preference/TizenBasePreferencePage.java
index c90b83721..040033f9a 100644
--- a/org.tizen.common/src/org/tizen/common/preferences/TizenBasePreferencePage.java
+++ b/org.tizen.common/src/org/tizen/common/ui/page/preference/TizenBasePreferencePage.java
@@ -23,7 +23,7 @@
*
*/
-package org.tizen.common.preferences;
+package org.tizen.common.ui.page.preference;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.DirectoryFieldEditor;
@@ -39,21 +39,24 @@ import org.eclipse.ui.IWorkbenchPreferencePage;
import org.tizen.common.CommonPlugin;
-public class TizenBasePreferencePage extends FieldEditorPreferencePage implements
- IWorkbenchPreferencePage {
+public class
+TizenBasePreferencePage
+extends FieldEditorPreferencePage
+implements IWorkbenchPreferencePage
+{
public final static String TIZENSDK_PATH = CommonPlugin.PLUGIN_ID + ".TizenSDKBasePreferencePage"; //$NON-NLS-1$
public static final String KEY_SDKLOCATION = "sdkpath"; //$NON-NLS-1$
public static final String KEY_SDKUPDATE = "sdkupdate"; //$NON-NLS-1$
public static final String VALUE_SDKLOCATION_DEFAULT = null;;
- public static final boolean VALUE_SDKUPDATE_DEFAULT = true;
+ public static final boolean VALUE_SDKUPDATE_DEFAULT = false;
public TizenBasePreferencePage() {
//super(GRID);
setPreferenceStore( CommonPlugin.getDefault().getPreferenceStore() );
//getPreferenceStore().addPropertyChangeListener( getPropertyChangeListener() );
- setDescription( PreferenceMessages.getString( "TizenPreferencePage.0" ) );
+ setDescription( Messages.DESCRIPTION );
}
@@ -64,7 +67,6 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage impleme
@Override
protected void createFieldEditors() {
- // TODO Auto-generated method stub
Composite composite = getFieldEditorParent();
GridLayout layout = new GridLayout();
@@ -90,16 +92,16 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage impleme
}
private void createPathSettingPreferences( Composite parent ) {
- Composite comp = createGroup( parent, PreferenceMessages.getString( "TizenPreferencePage.1" ),1 ); //$NON-NLS-1$
+ Composite comp = createGroup( parent, Messages.GROUP1, 1 );
Composite formatComposite = createCompositeEx( comp, 1, GridData.FILL_HORIZONTAL);
- DirectoryFieldEditor mDirectoryField = new DirectoryFieldEditor(TizenBasePreferencePage.KEY_SDKLOCATION, PreferenceMessages.getString("TizenPreferencePage.2"), formatComposite);
+ DirectoryFieldEditor mDirectoryField = new DirectoryFieldEditor(KEY_SDKLOCATION, Messages.LABEL_LOCATION, formatComposite);
addField(mDirectoryField);
}
private void createUpdateSettingPreferences( Composite parent ) {
- Composite comp = createGroup( parent, PreferenceMessages.getString( "TizenPreferencePage.3" ),1 ); //$NON-NLS-1$
+ Composite comp = createGroup( parent, Messages.GROUP2, 1 );
Composite formatComposite = createCompositeEx( comp, 1, GridData.FILL_HORIZONTAL);
- BooleanFieldEditor startupCheckEditor = new BooleanFieldEditor(TizenBasePreferencePage.KEY_SDKUPDATE, PreferenceMessages.getString("TizenPreferencePage.4"), formatComposite);
+ BooleanFieldEditor startupCheckEditor = new BooleanFieldEditor(KEY_SDKUPDATE, Messages.LABEL_UPDATE, formatComposite);
addField(startupCheckEditor);
}
diff --git a/org.tizen.common/src/org/tizen/common/swt/TrayWizardPage.java b/org.tizen.common/src/org/tizen/common/ui/page/wizard/TrayWizardPage.java
index c5c328c9f..9d346fc8c 100644
--- a/org.tizen.common/src/org/tizen/common/swt/TrayWizardPage.java
+++ b/org.tizen.common/src/org/tizen/common/ui/page/wizard/TrayWizardPage.java
@@ -23,7 +23,7 @@
*
*/
-package org.tizen.common.swt;
+package org.tizen.common.ui.page.wizard;
import org.eclipse.jface.dialogs.DialogTray;
import org.eclipse.jface.dialogs.TrayDialog;
@@ -38,6 +38,7 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.tizen.common.ui.dialog.ClosableTray;
/**
diff --git a/org.tizen.common/src/org/tizen/common/console/AnsicodeAdapter.java b/org.tizen.common/src/org/tizen/common/ui/view/console/AnsicodeAdapter.java
index 73a32ad3b..822d5ea85 100644..100755
--- a/org.tizen.common/src/org/tizen/common/console/AnsicodeAdapter.java
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/AnsicodeAdapter.java
@@ -23,35 +23,58 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.console;
+package org.tizen.common.ui.view.console;
+
+import static org.tizen.common.util.SWTUtil.getDisplay;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
import org.eclipse.swt.graphics.Color;
-import org.eclipse.ui.PlatformUI;
+import org.tizen.common.util.MapUtil;
public class AnsicodeAdapter {
public static final char ESCAPE = '\033'; // ANSI Escape Character that starts commands
- public static final Color BLACK = new Color(PlatformUI.getWorkbench().getDisplay(), 0, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
- public static final Color RED = new Color(PlatformUI.getWorkbench().getDisplay(), 255, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_RED);
- public static final Color GREEN = new Color(PlatformUI.getWorkbench().getDisplay(), 0, 255, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_GREEN);
- public static final Color YELLOW = new Color(PlatformUI.getWorkbench().getDisplay(), 255, 255, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW);
- public static final Color BLUE = new Color(PlatformUI.getWorkbench().getDisplay(), 0,0,255); //Display.getCurrent().getSystemColor(SWT.COLOR_BLUE);
- public static final Color MAGENTA = new Color(PlatformUI.getWorkbench().getDisplay(), 255, 0, 255); //Display.getCurrent().getSystemColor(SWT.COLOR_MAGENTA);
- public static final Color CYAN = new Color(PlatformUI.getWorkbench().getDisplay(), 0,255, 255); //Display.getCurrent().getSystemColor(SWT.COLOR_CYAN);
- public static final Color WHITE = new Color(PlatformUI.getWorkbench().getDisplay(), 255, 255, 255); //Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);
-
- public static final Color INTENSE_BLACK = new Color(PlatformUI.getWorkbench().getDisplay(), 0, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY);
- public static final Color INTENSE_RED = new Color(PlatformUI.getWorkbench().getDisplay(), 139, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_DARK_RED);
- public static final Color INTENSE_GREEN = new Color(PlatformUI.getWorkbench().getDisplay(), 0, 100, 0);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN);
- public static final Color INTENSE_YELLOW = new Color(PlatformUI.getWorkbench().getDisplay(), 250,250,210);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW);
- public static final Color INTENSE_BLUE = new Color(PlatformUI.getWorkbench().getDisplay(), 0,0,139);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE);
- public static final Color INTENSE_MAGENTA = new Color(PlatformUI.getWorkbench().getDisplay(), 139,0,139);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_MAGENTA);
- public static final Color INTENSE_CYAN = new Color(PlatformUI.getWorkbench().getDisplay(), 0, 139, 139);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_CYAN);
- public static final Color INTENSE_WHITE = new Color(PlatformUI.getWorkbench().getDisplay(), 245, 245, 245);//Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);
+ public static final Color BLACK = new Color(getDisplay(), 0, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
+ public static final Color RED = new Color(getDisplay(), 255, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_RED);
+ public static final Color GREEN = new Color(getDisplay(), 0, 255, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_GREEN);
+ public static final Color YELLOW = new Color(getDisplay(), 255, 255, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW);
+ public static final Color BLUE = new Color(getDisplay(), 0,0,255); //Display.getCurrent().getSystemColor(SWT.COLOR_BLUE);
+ public static final Color MAGENTA = new Color(getDisplay(), 255, 0, 255); //Display.getCurrent().getSystemColor(SWT.COLOR_MAGENTA);
+ public static final Color CYAN = new Color(getDisplay(), 0,255, 255); //Display.getCurrent().getSystemColor(SWT.COLOR_CYAN);
+ public static final Color WHITE = new Color(getDisplay(), 255, 255, 255); //Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);
+ public static final Color INTENSE_BLACK = new Color(getDisplay(), 0, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY);
+ public static final Color INTENSE_RED = new Color(getDisplay(), 139, 0, 0); //Display.getCurrent().getSystemColor(SWT.COLOR_DARK_RED);
+ public static final Color INTENSE_GREEN = new Color(getDisplay(), 0, 100, 0);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN);
+ public static final Color INTENSE_YELLOW = new Color(getDisplay(), 250,250,210);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW);
+ public static final Color INTENSE_BLUE = new Color(getDisplay(), 0,0,139);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE);
+ public static final Color INTENSE_MAGENTA = new Color(getDisplay(), 139,0,139);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_MAGENTA);
+ public static final Color INTENSE_CYAN = new Color(getDisplay(), 0, 139, 139);//Display.getCurrent().getSystemColor(SWT.COLOR_DARK_CYAN);
+ public static final Color INTENSE_WHITE = new Color(getDisplay(), 245, 245, 245);//Display.getCurrent().getSystemColor(SWT.COLOR_WHITE);
+
+ public static final Map<Integer, Color[]> CODE2COLOR = Collections.unmodifiableMap( MapUtil.<Integer, Color[]>asMap( new Object[][] {
+ new Object[] { 30, new Color[] { INTENSE_BLACK, BLACK } },
+ new Object[] { 31, new Color[] { INTENSE_RED, RED } },
+ new Object[] { 32, new Color[] { INTENSE_GREEN, GREEN } },
+ new Object[] { 33, new Color[] { INTENSE_YELLOW, YELLOW } },
+ new Object[] { 34, new Color[] { INTENSE_BLUE, BLUE } },
+ new Object[] { 35, new Color[] { INTENSE_MAGENTA, MAGENTA } },
+ new Object[] { 36, new Color[] { INTENSE_CYAN, CYAN } },
+ new Object[] { 37, new Color[] { INTENSE_WHITE, WHITE } },
+ new Object[] { 40, new Color[] { INTENSE_BLACK, BLACK } },
+ new Object[] { 41, new Color[] { INTENSE_RED, RED } },
+ new Object[] { 42, new Color[] { INTENSE_GREEN, GREEN } },
+ new Object[] { 43, new Color[] { INTENSE_YELLOW, YELLOW } },
+ new Object[] { 44, new Color[] { INTENSE_BLUE, BLUE } },
+ new Object[] { 45, new Color[] { INTENSE_MAGENTA, MAGENTA } },
+ new Object[] { 46, new Color[] { INTENSE_CYAN, CYAN } },
+ new Object[] { 47, new Color[] { INTENSE_WHITE, WHITE } },
+ } ) );
+
private static int[] commands = {'m','n'}; //SGR , DSR
private static List<TextStyle> parseAnsiString(String ansiString) {
@@ -148,59 +171,16 @@ public class AnsicodeAdapter {
}
return color;
}
+
+
+
private static Color getColorFromANSICode(int code, boolean brighter) {
- switch (code) {
- case 30:
- case 40:
- if (brighter)
- return INTENSE_BLACK;
- else
- return BLACK;
- case 31:
- case 41:
- if (brighter)
- return INTENSE_RED;
- else
- return RED;
- case 32:
- case 42:
- if (brighter)
- return INTENSE_GREEN;
- else
- return GREEN;
- case 33:
- case 43:
- if (brighter)
- return INTENSE_YELLOW;
- else
- return YELLOW;
- case 34:
- case 44:
- if (brighter)
- return INTENSE_BLUE;
- else
- return BLUE;
- case 35:
- case 45:
- if (brighter)
- return INTENSE_MAGENTA;
- else
- return MAGENTA;
- case 36:
- case 46:
- if (brighter)
- return INTENSE_CYAN;
- else
- return CYAN;
- case 37:
- case 47:
- if (brighter)
- return INTENSE_WHITE;
- else
- return WHITE;
- default:
- return null;
- }
+ final Color[] colorSet = CODE2COLOR.get( code );
+ if ( null == colorSet )
+ {
+ return null;
+ }
+ return colorSet[brighter?0:1];
}
public static String getStripAnsiString(String newLineStr) {
List<TextStyle> styles = parseAnsiString(newLineStr);
diff --git a/org.tizen.common/src/org/tizen/common/console/ConsoleManager.java b/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager.java
index 455d7dd7f..2c41b34f8 100644
--- a/org.tizen.common/src/org/tizen/common/console/ConsoleManager.java
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager.java
@@ -23,7 +23,7 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.console;
+package org.tizen.common.ui.view.console;
import java.io.IOException;
import java.lang.reflect.Method;
@@ -48,6 +48,7 @@ import org.eclipse.ui.console.MessageConsoleStream;
* @author GyeongSeok Seo {@literal <gyeongseok.seo@samsung.com>} (S-Core)
*/
public class ConsoleManager
+implements IConsolePrinter
{
private IConsoleManager consoleManager;
private String consoleName;
@@ -248,10 +249,10 @@ public class ConsoleManager
IConsoleView view = null;
try {
view = (IConsoleView) page.showView(id);
+ view.display(getConsole());
} catch (PartInitException e) {
ConsolePlugin.log(e);
}
- view.display(getConsole());
}
};
Display.getDefault().syncExec(runnable);
diff --git a/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager2.java b/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager2.java
new file mode 100644
index 000000000..d9fa7f7d4
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleManager2.java
@@ -0,0 +1,411 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Yoonki Park <yoonki.park@samsung.com>
+* Kangho Kim <kh5325.kim@samsung.com>
+* BonYong Lee<bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.view.console;
+
+import static org.tizen.common.util.SWTUtil.asyncExec;
+import static org.tizen.common.util.SWTUtil.getActivePage;
+import static org.tizen.common.util.SWTUtil.syncExec;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleConstants;
+import org.eclipse.ui.console.IConsoleManager;
+import org.eclipse.ui.console.IConsoleView;
+import org.eclipse.ui.console.MessageConsoleStream;
+
+/**
+ * ConsoleManager2.
+ *
+ * {@link MessageConsole}'s delegater
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+ConsoleManager2
+implements IConsolePrinter, IHyperlinkManager
+{
+
+ /**
+ * MessageConsole to be delegated
+ */
+ protected final MessageConsoleSpy console;
+
+ /**
+ * Link manager
+ */
+ protected final HyperlinkManager hyperlinkManager;
+
+ /**
+ * console's name
+ *
+ * @see {@link IConsole#setName(String)}
+ */
+ private String consoleName;
+
+ /**
+ * document model's virtual length
+ */
+ protected int documentLength = 0;
+
+ /**
+ * Constructs a new console manager.
+ *
+ * @param consoleName - the key title
+ * @param focus - true if focus on console, false if not
+ */
+ public
+ ConsoleManager2(
+ final String consoleName,
+ final boolean focus
+ )
+ {
+ this.console = createMessageConsole();
+ this.hyperlinkManager = new HyperlinkManager( console );
+ this.console.getDocument().addDocumentListener( hyperlinkManager );
+
+ if ( focus )
+ {
+ getConsoleManager().showConsoleView(console);
+ }
+
+ setName( consoleName );
+ }
+
+ /**
+ * return {@link IConsoleManager} from {@link ConsolePlugin}
+ *
+ * @return {@link IConsoleManager}
+ *
+ * @see ConsolePlugin#getConsoleManager()
+ */
+ protected IConsoleManager getConsoleManager()
+ {
+ return ConsolePlugin.getDefault().getConsoleManager();
+ }
+
+ /**
+ * return <code>IConsole</code>s to be attached to {@link IConsoleManager}
+ *
+ * @return <code>IConsole</code>s
+ *
+ * @see #getConsoleManager()
+ * @see IConsoleManager#getConsoles()
+ */
+ protected IConsole[] getConsoles()
+ {
+ return getConsoleManager().getConsoles();
+ }
+
+
+ /**
+ * Change Console Name.
+ *
+ * @param newName - console Title. It shown console's tab bar.
+ * @author Gyeongseok.seo@samsung.com
+ */
+ public void
+ setName(
+ final String newName
+ )
+ {
+ if ( null == newName )
+ {
+ throw new NullPointerException();
+ }
+ this.consoleName = newName;
+ asyncExec( new Runnable()
+ {
+ public void run()
+ {
+ if ( null == console )
+ {
+ return ;
+ }
+ console.setName(newName);
+ }
+ } );
+ }
+
+ /**
+ * Create message console
+ *
+ * @return Message console for emulator
+ */
+ synchronized protected MessageConsoleSpy createMessageConsole()
+ {
+ // Delete Old Console from console view
+ final IConsole[] consoles = getConsoles();
+ for ( int i = 0, n = consoles.length ; i < n ; ++i )
+ {
+ if ( !this.consoleName.equals(consoles[i].getName() ) )
+ {
+ continue;
+ }
+ getConsoleManager().removeConsoles( new IConsole[] { console } );
+ }
+
+ final MessageConsoleSpy console = new MessageConsoleSpy( this.consoleName );
+ getConsoleManager().addConsoles( new IConsole[] { console } );
+
+ return console;
+ }
+
+ /**
+ * return {@link IConsole}
+ *
+ * @return {@link IConsole} to be managed
+ */
+ protected IConsole getConsole() {
+ return this.console;
+ }
+
+ /**
+ * print <code>line</code> out to {@link IConsole} with line separator
+ *
+ * @param line text to print
+ */
+ synchronized public void println(String line) {
+ final MessageConsoleStream output = createConsoleStream();
+
+ try
+ {
+ output.println( line );
+ documentLength += ( line.length() + 1 );
+
+ } finally
+ {
+ tryClose( output );
+ }
+ }
+
+ /**
+ * Print out using {@link Process}
+ * @param process
+ */
+ public void printProcessStreams( final Process process) {
+
+ clear();
+ // waitAndRead while process is running
+ ConsoleProcessClosure closure = new ConsoleProcessClosure(process, this);
+
+ closure.runBlocking(); // a blocking cal
+ }
+
+
+ /**
+ * Return configured <code>MessageConsoleStream</code>
+ *
+ * with <code>fontStyle</code> and <code>color</code>
+ *
+ * @param fontStyle SWT font style like {@link SWT#BOLD}, {@link SWT#ITALIC}, and etc.
+ * @param color color of message to be printed
+ *
+ * @return configured <code>MessageConsoleStream</code>
+ *
+ * @see #configureConsole(MessageConsoleStream, int, Color)
+ */
+ protected
+ MessageConsoleStream
+ getConsoleStream(
+ final int fontStyle,
+ final Color color
+ )
+ {
+ final MessageConsoleStream stream = createConsoleStream();
+
+ configureConsole( stream, fontStyle, color );
+
+ return stream;
+ }
+
+
+ /**
+ * Factory method for <code>MessageConsoleStream</code>
+ *
+ * @return <code>MessageConsoleStream</code> to be created
+ *
+ * @see MessageConsole#newMessageStream()
+ */
+ protected
+ MessageConsoleStream
+ createConsoleStream()
+ {
+ final MessageConsoleStream stream = console.newMessageStream();
+
+ return stream;
+ }
+
+ /**
+ * Configure <code>stream</code> with <code>fontStyle</code> and <code>color</code>
+ *
+ * @param stream <code>MessageConsoleStream</code> to configure
+ * @param fontStyle SWT font style
+ * @param color
+ *
+ * @see SWT#NORMAL
+ * @see SWT#BOLD
+ * @see SWT#ITALIC
+ */
+ protected void
+ configureConsole(
+ final MessageConsoleStream stream,
+ final int fontStyle,
+ final Color color
+ )
+ {
+ syncExec( new Runnable()
+ {
+ public void run()
+ {
+ // font setting
+ stream.setFontStyle( fontStyle );
+
+ // color setting
+ stream.setColor( color );
+ }
+ } );
+ }
+
+ /**
+ * print out <code>message</code> with <code>fontStyle</code> and <code>color</code>
+ *
+ * @param message message to print out
+ * @param fontStyle SWT font style
+ * @param color color of message
+ */
+ synchronized public
+ void
+ print(
+ final String message,
+ final int fontStyle,
+ final Color color
+ )
+ {
+ final MessageConsoleStream stream = getConsoleStream( fontStyle, color );
+ try
+ {
+ stream.print(message);
+ documentLength += (message.length() );
+ }
+ finally
+ {
+ tryClose( stream );
+ }
+ }
+
+ /**
+ * print out with line separator
+ *
+ * @param message message to print out
+ * @param fontStyle font style
+ * @param color color
+ *
+ * @see #print(String, int, Color)
+ */
+ public
+ void
+ println(
+ final String message,
+ final int fontStyle,
+ final Color color
+ )
+ {
+ print( message + "\n", fontStyle, color );
+ }
+
+ /**
+ * clear message console
+ */
+ synchronized public
+ void
+ clear()
+ {
+ syncExec(
+ new Runnable() {
+ public void run() {
+ IDocument document = console.getDocument();
+ if ( null == document )
+ {
+ return ;
+ }
+ document.set("");
+ }
+ }
+ );
+ documentLength = 0;
+ }
+
+ /**
+ * Activate console
+ */
+ public
+ void
+ show()
+ {
+ syncExec(
+ new Runnable() {
+ public void run() {
+ final IWorkbenchPage page = getActivePage();
+ if ( null == page )
+ {
+ // How to handle no active page( no view page )
+ throw new IllegalStateException();
+ }
+ try {
+ IConsoleView view = (IConsoleView) page.showView( IConsoleConstants.ID_CONSOLE_VIEW );
+ view.display(getConsole());
+ } catch (
+ final PartInitException e
+ )
+ {
+ ConsolePlugin.log(e);
+ }
+ }
+ }
+ );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.console.IHyperlinkerManager#addLinker(org.tizen.common.console.LinkInfo)
+ */
+ @Override
+ public
+ void
+ addLinker(
+ final LinkInfo link
+ )
+ {
+ hyperlinkManager.addLinker( link );
+ }
+
+}
+
diff --git a/org.tizen.common/src/org/tizen/common/console/ConsoleProcessClosure.java b/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleProcessClosure.java
index a9fa6ed0f..c82224da6 100644
--- a/org.tizen.common/src/org/tizen/common/console/ConsoleProcessClosure.java
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/ConsoleProcessClosure.java
@@ -23,9 +23,12 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.console;
+package org.tizen.common.ui.view.console;
+
+import static org.tizen.common.util.IOUtil.tryClose;
import java.io.BufferedReader;
+import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -44,16 +47,18 @@ public class ConsoleProcessClosure {
* Thread which continuously reads from a input stream and pushes the read
* data to an output stream which is immediately flushed afterwards.
*/
- protected static class ReaderThread extends Thread {
+ protected static class ReaderThread
+ extends Thread
+ implements Closeable {
private InputStream fInputStream;
- private ConsoleManager fConsole;
+ private IConsolePrinter fConsole;
private boolean fFinished = false;
private String lineSeparator;
/*
* outputStream can be null
*/
- public ReaderThread(ThreadGroup group, String name, InputStream in, ConsoleManager out) {
+ public ReaderThread(ThreadGroup group, String name, InputStream in, IConsolePrinter out) {
super(group, name);
fConsole = out;
fInputStream = in;
@@ -82,11 +87,7 @@ public class ConsoleProcessClosure {
} catch (IOException x) {
// ignore
} finally {
- try {
- fInputStream.close();
- } catch (IOException e) {
- // ignore
- }
+ tryClose( fInputStream );
}
} finally {
complete();
@@ -124,7 +125,7 @@ public class ConsoleProcessClosure {
protected static int fCounter = 0;
protected Process fProcess;
- protected ConsoleManager fConsole;
+ protected IConsolePrinter fConsole;
protected ReaderThread fOutputReader;
protected ReaderThread fErrorReader;
@@ -140,7 +141,7 @@ public class ConsoleProcessClosure {
* prcess stderr is written to this stream. Can be
* <code>null</code>, if not interested in reading the output
*/
- public ConsoleProcessClosure(Process process, ConsoleManager console) {
+ public ConsoleProcessClosure(Process process, IConsolePrinter console) {
fProcess = process;
fConsole = console;
}
@@ -189,8 +190,7 @@ public class ConsoleProcessClosure {
fErrorReader.waitFor();
}
- fOutputReader.close();
- fErrorReader.close();
+ tryClose( fOutputReader, fErrorReader );
// it seems that thread termination and stream closing is working
// without
// any help
@@ -205,10 +205,7 @@ public class ConsoleProcessClosure {
return true;
}
fProcess = null;
- fOutputReader.close();
- fErrorReader.close();
- fOutputReader = null;
- fErrorReader = null;
+ tryClose( fOutputReader, fErrorReader );
}
return false;
}
@@ -241,10 +238,7 @@ public class ConsoleProcessClosure {
if (!fErrorReader.finished()) {
fErrorReader.waitFor();
}
- fOutputReader.close();
- fErrorReader.close();
- fOutputReader = null;
- fErrorReader = null;
+ tryClose( fOutputReader, fErrorReader );
}
}
diff --git a/org.tizen.common/src/org/tizen/common/ui/view/console/HyperlinkManager.java b/org.tizen.common/src/org/tizen/common/ui/view/console/HyperlinkManager.java
new file mode 100644
index 000000000..be32de9b1
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/HyperlinkManager.java
@@ -0,0 +1,131 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.view.console;
+
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.DocumentEvent;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentListener;
+import org.eclipse.ui.console.TextConsole;
+
+/**
+ * HyperlinkManager.
+ *
+ * Manage hyperlink.
+ *
+ * process deferedly because {@link TextConsole} is asynchronous.
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+HyperlinkManager
+implements IHyperlinkManager, IDocumentListener
+{
+ /**
+ * {@link TextConsole} to connect link
+ */
+ protected TextConsole console;
+
+ /**
+ * unconnected links
+ */
+ protected final TreeSet<LinkInfo> dangledLinks = new TreeSet<LinkInfo>();
+
+ /**
+ * Constructor with {@link TextConsole} to connect link
+ *
+ * @param console {@link TextConsole} to connect link
+ */
+ public
+ HyperlinkManager(
+ final TextConsole console
+ )
+ {
+ this.console = console;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)
+ */
+ @Override
+ public
+ void
+ documentAboutToBeChanged(
+ final DocumentEvent event
+ )
+ {
+ // Not implement
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent)
+ */
+ @Override
+ public
+ void
+ documentChanged(
+ final DocumentEvent event
+ )
+ {
+ final IDocument doc = event.getDocument();
+ final int docLen = doc.getLength();
+
+ for ( final Iterator<LinkInfo> iter = dangledLinks.iterator() ; iter.hasNext() ; )
+ {
+ final LinkInfo info = iter.next();
+
+ if ( docLen < info.getEnd() )
+ {
+ return ;
+ }
+
+ try
+ {
+ this.console.addHyperlink( info.getLink(), info.getStart(), info.getLength() );
+ iter.remove();
+ } catch ( final BadLocationException e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.console.IHyperlinkerManager#addLinker(org.tizen.common.console.LinkInfo)
+ */
+ @Override
+ public
+ void
+ addLinker(
+ final LinkInfo link
+ )
+ {
+ dangledLinks.add( link );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/ui/view/console/IConsolePrinter.java b/org.tizen.common/src/org/tizen/common/ui/view/console/IConsolePrinter.java
new file mode 100644
index 000000000..efa154ac7
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/IConsolePrinter.java
@@ -0,0 +1,46 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.view.console;
+
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * IConsolePrinter.
+ *
+ * {@link IConsoleManager}'s adaptation interface
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface IConsolePrinter
+{
+ /**
+ * print line out to {@link IConsole}
+ *
+ * @param msg message to print out
+ * @param fontStyle font style flag
+ * @param color foreground color of <code>msg</code> to print out
+ */
+ void print( String msg, int fontStyle, Color color );
+}
diff --git a/org.tizen.common/src/org/tizen/common/model/ITableVO.java b/org.tizen.common/src/org/tizen/common/ui/view/console/IHyperlinkManager.java
index e8a4592f3..68d995e6f 100644
--- a/org.tizen.common/src/org/tizen/common/model/ITableVO.java
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/IHyperlinkManager.java
@@ -1,35 +1,46 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-public interface ITableVO extends IVO{
- public String[] getColumnNames();
- public Object getColumnValue(int index);
- public Object getColumnValue(String columnName);
- public int getColumnIndex(String columnName);
- public String getColumnName(int index);
- public void setColumnValue(int index, Object value);
-}
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.view.console;
+
+
+/**
+ * IHyperlinkerManager.
+ *
+ * Manage hyperlinks in asynchronous stream
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+IHyperlinkManager
+{
+ /**
+ * add <code>link</code> to IConsole
+ *
+ * @param link hyper link's info
+ *
+ * @see LinkInfo
+ */
+ void addLinker( LinkInfo link );
+}
diff --git a/org.tizen.common/src/org/tizen/common/ui/view/console/LinkInfo.java b/org.tizen.common/src/org/tizen/common/ui/view/console/LinkInfo.java
new file mode 100644
index 000000000..9eb0bbcaa
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/LinkInfo.java
@@ -0,0 +1,151 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.view.console;
+
+import org.eclipse.ui.console.IHyperlink;
+
+/**
+ * LinkInfo.
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+LinkInfo
+implements Comparable<LinkInfo>
+{
+ /**
+ * Link's start offset
+ */
+ protected final int offset;
+
+ /**
+ * Link's textual length
+ */
+ protected final int length;
+
+ /**
+ * <code>IHyperlink</code> to connect
+ */
+ protected final IHyperlink link;
+
+ /**
+ * Constructor with link's offset, length and hyperlink
+ *
+ * @param offset link's start offset
+ * @param length link's length
+ * @param link hyperlink
+ */
+ public LinkInfo(
+ final int offset,
+ final int length,
+ final IHyperlink link
+ )
+ {
+ this.offset = offset;
+ this.length = length;
+ this.link = link;
+ if ( length < 0 )
+ {
+ throw new IllegalArgumentException( "Link's length is negative :" + this );
+ }
+ }
+
+ /**
+ * Return link's start position in text
+ *
+ * @return link's start position
+ *
+ * @see #getEnd()
+ * @see #getLength()
+ */
+ public
+ int
+ getStart()
+ {
+ return this.offset;
+ }
+
+ /**
+ * Return link's end position in text
+ *
+ * @return link's end position
+ *
+ * @see #getStart()
+ * @see #getEnd()
+ */
+ public
+ int
+ getEnd()
+ {
+ return getStart() + getLength();
+ }
+
+ /**
+ * Return link's length
+ *
+ * @return link's length
+ *
+ * @see #getStart();
+ * @see #getEnd();
+ */
+ public
+ int
+ getLength()
+ {
+ return this.length;
+ }
+
+ /**
+ * return hyper link
+ * @return {@link IHyperlink}
+ */
+ public
+ IHyperlink
+ getLink()
+ {
+ return this.link;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ @Override
+ public
+ int
+ compareTo(LinkInfo o)
+ {
+ return getLength() - o.getLength();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ return "Link(" + getStart() + ":" + getEnd() + ")-" + link;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/ui/view/console/MessageConsoleSpy.java b/org.tizen.common/src/org/tizen/common/ui/view/console/MessageConsoleSpy.java
new file mode 100644
index 000000000..1a1a7dfd6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/MessageConsoleSpy.java
@@ -0,0 +1,55 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.view.console;
+
+import org.eclipse.ui.console.MessageConsole;
+
+public class
+MessageConsoleSpy
+extends MessageConsole
+{
+
+ /**
+ * Constructor with console name
+ *
+ * @param name console's key title
+ */
+ public MessageConsoleSpy( final String name )
+ {
+ super( name, null );
+ }
+
+ /**
+ * make {@link AbstractConsole#setName(String)} accessible
+ *
+ * @see org.eclipse.ui.console.AbstractConsole#setName(java.lang.String)
+ */
+ public void setName( final String name )
+ {
+ super.setName( name );
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/console/TextStyle.java b/org.tizen.common/src/org/tizen/common/ui/view/console/TextStyle.java
index d068ef8bf..000c1b0ab 100644
--- a/org.tizen.common/src/org/tizen/common/console/TextStyle.java
+++ b/org.tizen.common/src/org/tizen/common/ui/view/console/TextStyle.java
@@ -23,7 +23,7 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.console;
+package org.tizen.common.ui.view.console;
import org.eclipse.swt.graphics.Color;
diff --git a/org.tizen.common/src/org/tizen/common/swt/PictureLabel.java b/org.tizen.common/src/org/tizen/common/ui/widget/PictureLabel.java
index 1cda75f87..c56ed6292 100644
--- a/org.tizen.common/src/org/tizen/common/swt/PictureLabel.java
+++ b/org.tizen.common/src/org/tizen/common/ui/widget/PictureLabel.java
@@ -23,7 +23,7 @@
*
*/
-package org.tizen.common.swt;
+package org.tizen.common.ui.widget;
import java.util.List;
import java.util.ArrayList;
@@ -191,6 +191,9 @@ public class PictureLabel extends Canvas {
}
class ImageClickedEvent extends java.util.EventObject {
+
+ private static final long serialVersionUID = 2923125560667763769L;
+
public int x, y;
public ImageClickedEvent(Object source, int x, int y) {
diff --git a/org.tizen.common/src/org/tizen/common/update/UpdateMessages.properties b/org.tizen.common/src/org/tizen/common/update/UpdateMessages.properties
deleted file mode 100644
index 06a30a973..000000000
--- a/org.tizen.common/src/org/tizen/common/update/UpdateMessages.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-##
-message.dialogTitle = Tizen SDK
-message.askForUpdate = Updates are available for Tizen SDK. Do you want to install them? \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/util/ArrayUtil.java b/org.tizen.common/src/org/tizen/common/util/ArrayUtil.java
new file mode 100755
index 000000000..ee1a5715d
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/ArrayUtil.java
@@ -0,0 +1,1124 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * ArrayUtil.
+ *
+ * Helper related to array
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class ArrayUtil
+{
+ /**
+ * Empty {@link Object} array
+ */
+ public static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+
+
+ /**
+ * <p>
+ * check <code>collection</code> has no element.
+ *
+ * use without null check.
+ *
+ * Old style
+ *
+ * <pre>
+ * Object[] array = null;
+ * ...
+ * if ( null != array && 0 < array.length ) {
+ * ...
+ * }
+ * </pre>
+ *
+ * Usage :
+ * <p>
+ *
+ * <pre>
+ * Object[] array = null;
+ * ...
+ * if ( !ArrayUtil.isEmpty( array ) ) {
+ * ...
+ * }
+ * </pre>
+ *
+ * or "import static" style if you use JDK6
+ *
+ * </pre>
+ * import static org.tizen.common.util.CollectionUtil.isEmpty;
+ * ...
+ *
+ * Object[] array = null;
+ * ...
+ * if ( !isEmpty( array ) ) {
+ * ...
+ * }
+ * </pre>
+ *
+ * @param array {@link Collection} to check
+ *
+ * @return value if collection is empty
+ */
+ public static <T>
+ boolean
+ isEmpty(
+ final T[] array
+ )
+ {
+ if ( null == array )
+ {
+ return true;
+ }
+
+ return (0 == array.length);
+ }
+
+ /**
+ * <p>
+ * Return first element in <code>array</code><br>
+ *
+ * Return <code>null</code> if <code>array</code> is null or empty
+ * </p>
+ *
+ * @param <T> type of element in <code>array</code>
+ * @param array object array to check
+ *
+ * @return first elemtn in <code>array</code>
+ */
+ public static <T>
+ T
+ pickupFirst( T[] array )
+ {
+ if ( isEmpty( array ) )
+ {
+ return null;
+ }
+
+ return array[0];
+ }
+
+ /**
+ * <p>
+ * Return last element in <code>array</code><br>
+ *
+ * Return <code>null</code> if <code>array</code> is null or empty
+ * </p>
+ *
+ * @param <T> type of element in <code>array</code>
+ * @param array object array to check
+ *
+ * @return last elemtn in <code>array</code>
+ */
+ public static <T>
+ T
+ pickupLast( T[] array )
+ {
+ if ( isEmpty( array ) )
+ {
+ return null;
+ }
+
+ return array[array.length - 1];
+ }
+
+ /**
+ * Create array with <code>length</code>
+ *
+ * @param <T> type of element in array to create
+ * @param type {@link Class}
+ * @param length array size
+ *
+ * @return created array
+ */
+ @SuppressWarnings("unchecked")
+ public static <T>
+ T[] newArray( Class<? extends T> type, int length)
+ {
+ return (T[]) Array.newInstance( type, length);
+ }
+
+ /**
+ * {@link Iterator} for array
+ *
+ * @param <K> element type in array
+ */
+ public static class
+ ArrayIterator<K>
+ implements Iterator<K>
+ {
+ /**
+ * cloned array
+ */
+ protected final K[] objs;
+
+ /**
+ * original array
+ */
+ protected final K[] origin;
+
+ /**
+ * current element index
+ */
+ protected int index = 0;
+
+ /**
+ * Constructor with array
+ *
+ * @param objs array to iterate
+ */
+ public
+ ArrayIterator(
+ final K[] objs
+ )
+ {
+ this.origin = objs;
+
+ this.objs = ( null == origin )?null:origin.clone();
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#hasNext()
+ */
+ @Override
+ public
+ boolean
+ hasNext()
+ {
+ if ( null == this.objs )
+ {
+ return false;
+ }
+ return ( index < this.objs.length );
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#next()
+ */
+ @Override
+ public
+ K
+ next()
+ {
+ if ( null == this.objs )
+ {
+ throw new NoSuchElementException();
+ }
+ if ( this.objs.length <= index )
+ {
+ throw new NoSuchElementException();
+ }
+
+ if ( objs[index] != origin[index] ) {
+ throw new ConcurrentModificationException();
+ }
+ return this.objs[index++];
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#remove()
+ */
+ @Override
+ public
+ void
+ remove()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ }
+
+ /**
+ * Create and return {@link Iterator} for <code>array</code>
+ *
+ * @param <T> iteraing element's type
+ * @param array array to iterate
+ *
+ * @return {@link Iterator} for <code>array</code>
+ */
+ public static <T> Iterator<T> iterator( final T[] array )
+ {
+ return new ArrayIterator<T>( array );
+ }
+
+ /**
+ * <p>
+ * run <code>runner</code> iterateing element of <code>array</code>.
+ *
+ * use without null-check for <code>array</code>
+ *
+ * delegate error handling to <code>array</code>
+ * </p>
+ *
+ * <pre>
+ *
+ * ArrayUtil.iterate(
+ * Arrays.asList( "hello", "Hello", "World", null, "Test" ),
+ * new IteratingRunner<String>() {
+ * public void run( String arg ) {
+ * ...
+ * }
+ * }
+ * );
+ *
+ * </pre>
+ *
+ * @param <T> type of element in <code>array</code>
+ * @param array array containing element
+ * @param runner {@link Runnable} to execute
+ *
+ * @throws InvocationTargetException when <code>runner</code>'s {@link Runnable#run()} throws exception
+ *
+ * @see {@link #iterate(Object[], IteratingRunner, boolean)}
+ * @see FilterIterator
+ */
+ public static <T>
+ void
+ iterate(
+ final T[] array,
+ final IteratingRunner<T> runner
+ )
+ {
+ try
+ {
+ iterate( array, runner, true );
+ } catch ( final InvocationTargetException e)
+ {
+ // Be never reached
+ throw new IllegalStateException( e );
+ }
+ }
+
+ /**
+ * <p>
+ * run <code>runner</code> iterateing element of <code>array</code>.
+ *
+ * use without null-check for <code>array</code>
+ *
+ * delegate error handling to <code>runner</code>
+ *
+ * </p>
+ * <pre>
+ *
+ * ArrayUtil.iterate(
+ * Arrays.asList( "hello", "Hello", "World", null, "Test" ),
+ * new IteratingRunner<String>() {
+ * public void run( String arg ) {
+ * ...
+ * }
+ * },
+ * true
+ * );
+ *
+ * </pre>
+ *
+ * @param <T> type of element in <code>array</code>
+ * @param array array containing element
+ * @param runner {@link Runnable} to execute
+ * @param bForceProcess flag to iterate continuously when exception occurs
+ *
+ * @throws InvocationTargetException when <code>runner</code>'s {@link Runnable#run()} throws exception
+ *
+ * @see FilterIterator
+ */
+ public static <T>
+ void
+ iterate(
+ final T[] array,
+ final IteratingRunner<T> runner,
+ final boolean bForceProcess
+ )
+ throws InvocationTargetException
+ {
+ if ( null == runner )
+ {
+ return ;
+ }
+
+ for ( final T arg : safe( array ) )
+ {
+ if ( null == arg && !bForceProcess )
+ {
+ continue ;
+ }
+ try
+ {
+ runner.run( arg );
+ } catch ( Throwable e )
+ {
+ if ( !bForceProcess )
+ {
+ throw new InvocationTargetException( e );
+ }
+ }
+ }
+ }
+
+ /**
+ * <p>
+ * Fiter <code>array</code> and return filtered array
+ *
+ * Ignore exception in filtering logic
+ * </p>
+ *
+ * @param <T> type of element in <code>array</code>
+ * @param array array to filter
+ * @param runner object to determine if filter
+ */
+ public static <T>
+ T[]
+ filter(
+ final T[] array,
+ final IteratingAcceptor<T> runner
+ )
+ {
+ try
+ {
+ return filter( array, runner, true );
+ } catch ( final InvocationTargetException e )
+ {
+ // Be never reached
+ throw new IllegalStateException( e );
+ }
+ }
+ /**
+ * <p>
+ * Fiter <code>array</code> and return filtered array
+ *
+ * determined if stop or keep going using <code>bForceProcess</code> in case of exception.
+ * </p>
+ *
+ * @param <T> type of element in <code>array</code>
+ * @param array array to filter
+ * @param runner object to determine if filter
+ * @param bForceProcess flag to keep going when exception occurs
+ *
+ * @throws InvocationTargetException when <code>runner</code>'s {@link IteratingAcceptor#accept(Object)} throws exception
+ */
+ @SuppressWarnings("unchecked")
+ public static <T>
+ T[]
+ filter(
+ final T[] array,
+ final IteratingAcceptor<T> runner,
+ final boolean bForceProcess
+ ) throws InvocationTargetException
+ {
+ final ArrayList<T> list = new ArrayList<T>();
+
+ for ( final T arg : safe( array ) )
+ {
+ if ( null == arg && !bForceProcess )
+ {
+ continue ;
+ }
+ try
+ {
+ if ( runner.accept( arg ) )
+ {
+ list.add( arg );
+ }
+ } catch ( Throwable e )
+ {
+ if ( !bForceProcess )
+ {
+ throw new InvocationTargetException( e );
+ }
+ }
+
+ }
+
+ return (T[]) list.toArray( newArray( array.getClass().getComponentType(), list.size() ) );
+ }
+
+
+ /**
+ * Convert <code>source</code> to {@link Object[]}
+ *
+ * throw {@link IllegalArgumentException} if source is not array type
+ *
+ * @param source object to convert
+ *
+ * @return object to converted
+ */
+ public static
+ Object[]
+ toObjectArray(
+ final Object source
+ )
+ {
+ if ( source instanceof Object[] )
+ {
+ return ( Object[] )source;
+ }
+
+ if ( null == source )
+ {
+ return EMPTY_OBJECT_ARRAY;
+ }
+
+ if ( !source.getClass().isArray() )
+ {
+ throw new IllegalArgumentException( "source must be an array");
+ }
+
+ final int length = Array.getLength( source );
+ if ( 0 == length )
+ {
+ return EMPTY_OBJECT_ARRAY;
+ }
+
+ Class<?> wrapperType = null;
+ for ( int i = 0 ; null == wrapperType && i < length ; ++i )
+ {
+ Object obj = Array.get( source, 0 );
+ if ( null == obj )
+ {
+ continue;
+ }
+ wrapperType = obj.getClass();
+ }
+ if ( null == wrapperType )
+ {
+ return (Object[]) source;
+ }
+
+ final Object[] newArray =
+ (Object[]) Array.newInstance( wrapperType, length );
+ for( int i=0 ; i<length ; ++i )
+ {
+ newArray[i] = Array.get( source, i );
+ }
+
+ return newArray;
+ }
+
+ /**
+ * Return size if object is array or {@link Collection}
+ *
+ * Return <code>0</code> in case of the other type
+ *
+ * @param obj object to check
+ *
+ * @return size
+ */
+ public static
+ int
+ size(
+ final Object obj
+ )
+ {
+ if ( obj instanceof Object[] )
+ {
+ return size( ( Object[] ) obj );
+ }
+ else if ( obj instanceof boolean[] )
+ {
+ return size( ( boolean[] ) obj );
+ }
+ else if ( obj instanceof byte[] )
+ {
+ return size( ( byte[] )obj );
+ }
+ else if ( obj instanceof char[] )
+ {
+ return size( ( char[] ) obj );
+ }
+ else if ( obj instanceof short[] )
+ {
+ return size( ( short[] )obj );
+ }
+ else if ( obj instanceof int[] )
+ {
+ return size( (int[] ) obj );
+ }
+ else if ( obj instanceof long[] )
+ {
+ return size( ( long[] ) obj );
+ }
+ else if ( obj instanceof float[] )
+ {
+ return size( (float[] ) obj );
+ }
+ else if ( obj instanceof double[] )
+ {
+ return size( ( double[] ) obj );
+ }
+ else if ( obj instanceof Collection )
+ {
+ return CollectionUtil.size( (Collection<?>) obj );
+ }
+ return 0;
+
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs boolean array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final boolean[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs byte array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final byte[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs char array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final char[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs short array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final short[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs int array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final int[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs long array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final long[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs float array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final float[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param objs double array object
+ *
+ * @return size of array
+ */
+ public static
+ int
+ size(
+ final double[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * Return <code>objs</code>'s length
+ *
+ * Return 0 if <code>objs</code> is null.
+ *
+ * @param <T> type of array
+ * @param objs T type array object
+ *
+ * @return size of array
+ */
+ public static <T>
+ int
+ size(
+ final T[] objs
+ ) {
+ if ( null == objs )
+ {
+ return 0;
+ }
+ return objs.length;
+ }
+
+ /**
+ * add <code>obj</code> to <code>array</code>
+ *
+ * Return array having only <code>obj</code> if <code>array</code> is <code>null</code>
+ *
+ * @param array array to add element
+ * @param obj new element to add
+ *
+ * @return added array
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> T[]
+ add(
+ final T[] array,
+ final T obj
+ )
+ {
+ Class<?> compType = Object.class;
+ if ( null != array )
+ {
+ compType = array.getClass().getComponentType();
+ }
+ else if ( null != obj )
+ {
+ compType = obj.getClass();
+ }
+
+ final int newArrLength = size( array ) + 1;
+ final T[] newArr =
+ (T[]) Array.newInstance( compType, newArrLength );
+
+ if ( null != array )
+ {
+ System.arraycopy( array, 0, newArr, 0, array.length );
+ }
+ newArr[newArrLength - 1] = obj;
+ return newArr;
+ }
+
+ /**
+ * remove elements whose index is between <code>startIndex</code> and <code>endIndex</code>
+ *
+ * and return applied array
+ *
+ * @param <T> type of array element
+ * @param array array to remove elements
+ * @param startIndex start index of range to remove
+ * @param endIndex end index of range to remove
+ *
+ * @return change applied new array
+ *
+ * @throws ArrayIndexOutOfBoundsException
+ * if <code>startIndex</code> or <code>endIndex</code> is not in range of array
+ * @throws IllegalArgumentException
+ * if <code>startIndex</code> is greater than <code>endIndex</code>
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> T[]
+ remove(
+ final Object[] array,
+ final int start,
+ final int end
+ )
+ {
+ if ( null == array )
+ {
+ throw new NullPointerException();
+ }
+ Assert.isTrue(
+ start <= end,
+ "start indnex(" + start + ") is greater than end index(" + end + ")"
+ );
+
+ int startIndex = Math.max( 0, start );
+ int endIndex = Math.min( array.length, end );
+ if ( endIndex <= startIndex )
+ {
+ return (T[]) array;
+ }
+
+ final Class<?> compType = array.getClass().getComponentType();
+
+ final int removeSize = endIndex - startIndex;
+
+ final int newArrLength = size( array ) - removeSize;
+
+ final Object[] newArr =
+ (Object[]) Array.newInstance( compType, newArrLength );
+
+ System.arraycopy( array, 0, newArr, 0, startIndex );
+ System.arraycopy( array, endIndex, newArr, startIndex, array.length-endIndex );
+
+ return (T[]) newArr;
+ }
+
+ /**
+ * remove elements whose index is <code>index</code>
+ *
+ * and return applied array
+ *
+ * @param <T> type of array element
+ * @param array array to remove elements
+ * @param index index to remove
+ *
+ * @return change applied new array
+ *
+ * @throws ArrayIndexOutOfBoundsException
+ * if <code>index</code> is not in range of array
+ */
+ public static <T> T[]
+ remove(
+ final Object[] array,
+ final int index
+ )
+ {
+ return remove( array, index, index + 1);
+ }
+
+ /**
+ * Check if <code>array</code> contains <code>element</code>
+ *
+ * @param array array to check
+ * @param element object to check
+ *
+ * @return <code>true</code> if <code>collection</code> contain <code>element</code>
+ */
+ public static <K, V>
+ boolean
+ contains(
+ final K[] array,
+ final V element
+ )
+ {
+ if ( null == array )
+ {
+ return false;
+ }
+
+ for ( final Object candidate : array )
+ {
+ if ( ObjectUtil.equals( candidate, element ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Return <code>index</code> th element in <code>collection</code>
+ *
+ * Return <code>null</code> if <code>index</code> is out of range
+ *
+ * @param <K> array type
+ * @param array array object to access
+ * @param index array index
+ * @return <code>index</code> th element in array
+ */
+ public static <K>
+ K
+ get(
+ final K[] array,
+ final int index
+ )
+ {
+ if ( null == array )
+ {
+ return null;
+ }
+ if ( index < 0 )
+ {
+ return null;
+ }
+ if ( array.length <= index )
+ {
+ return null;
+ }
+
+ return array[index];
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Boolean[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Boolean[] convertToWrapper( final boolean[] array )
+ {
+ final int nArray = size( array );
+ final Boolean[] ret = new Boolean[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Byte[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Byte[] convertToWrapper( final byte[] array )
+ {
+ final int nArray = size( array );
+ final Byte[] ret = new Byte[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Character[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Character[] convertToWrapper( final char[] array )
+ {
+ final int nArray = size( array );
+ final Character[] ret = new Character[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+
+ /**
+ * Convert <code>array</code> to {@link Short[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Short[] convertToWrapper( final short[] array )
+ {
+ final int nArray = size( array );
+ final Short[] ret = new Short[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Integer[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Integer[] convertToWrapper( final int[] array )
+ {
+ final int nArray = size( array );
+ final Integer[] ret = new Integer[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Long[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Long[] convertToWrapper( final long[] array )
+ {
+ final int nArray = size( array );
+ final Long[] ret = new Long[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Float[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Float[] convertToWrapper( final float[] array )
+ {
+ final int nArray = size( array );
+ final Float[] ret = new Float[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ /**
+ * Convert <code>array</code> to {@link Double[]}
+ *
+ * @param array array to convert
+ *
+ * @return converted array
+ */
+ public static Double[] convertToWrapper( final double[] array )
+ {
+ final int nArray = size( array );
+ final Double[] ret = new Double[nArray];
+
+ for ( int i = 0 ; i < nArray ; ++i )
+ {
+ ret[i] = array[i];
+ }
+
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> T[] safe( T[] unsafe )
+ {
+ return (T[]) ObjectUtil.nvl( unsafe, EMPTY_OBJECT_ARRAY );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/Assert.java b/org.tizen.common/src/org/tizen/common/util/Assert.java
new file mode 100755
index 000000000..b9c4a0af7
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/Assert.java
@@ -0,0 +1,837 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import java.text.MessageFormat;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Assert
+ *
+ * Helper for assertion
+ *
+ * Assert following
+ * <ul>
+ * <li>boolean expression</li>
+ * <li>null object</li>
+ * <li>object equality</li>
+ * <li>string</li>
+ * <li>Collection</li>
+ * <li>Map</li>
+ * <li>object type</li>
+ * </ul>
+ */
+public class
+Assert
+{
+ protected Assert() { }
+
+ /**
+ * Encapsulated method in case of failure in assertion
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message.
+ *
+ * @param msg exception's message to throw
+ */
+ public static
+ void
+ fail(
+ final Object msg
+ )
+ {
+ if ( msg instanceof String )
+ {
+ throw new IllegalArgumentException( (String) msg );
+ } else if ( null != msg )
+ {
+ throw new IllegalArgumentException( msg.toString() );
+ }
+ }
+
+ /**
+ * Assert that <code>exp</code> is <code>true</code>
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>exp</code> is <code>false</code>
+ *
+ * @param exp boolean value to check
+ * @param msg exception's message to throw
+ *
+ * @see #fail(Object)
+ */
+ public static
+ void
+ isTrue(
+ final boolean exp,
+ final String msg
+ )
+ {
+ if ( exp )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+
+ /**
+ * Assert that <code>exp</code> is <code>false</code>
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>exp</code> is <code>true</code>
+ *
+ * @param exp boolean value to check
+ * @param msg exception's message to throw
+ *
+ * @see #fail(Object)
+ */
+ public static
+ void
+ isFalse(
+ final boolean exp,
+ final String msg
+ )
+ {
+ if ( !exp )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+
+ /**
+ * Assert that <code>exp</code> is <code>true</code>
+ *
+ * Throw {@link IllegalArgumentException} with "Expression must be true" message
+ *
+ * if <code>exp</code> is <code>false</code>
+ *
+ * @param exp boolean value to check
+ *
+ * @see #isTrue(boolean, String)
+ */
+ public static void
+ isTrue(
+ final boolean exp
+ )
+ {
+ isTrue( exp, "Expression must be true" );
+ }
+
+ /**
+ * Assert that <code>exp</code> is <code>false</code>
+ *
+ * Throw {@link IllegalArgumentException} with "Expression must be false" message
+ *
+ * if <code>exp</code> is <code>true</code>
+ *
+ * @param exp boolean value to check
+ *
+ * @see #isFalse(boolean, String)
+ */
+ public static
+ void
+ isFalse(
+ final boolean exp
+ )
+ {
+ isFalse( exp, "Expression must be false" );
+ }
+
+ /**
+ * Assert that <code>obj</code> is <code>null</code>
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>obj</code> is not <code>null</code>
+ *
+ * @param obj object to check
+ * @param msg exception's message to throw
+ *
+ * @see #isTrue(boolean, String)
+ */
+ public static
+ void
+ isNull(
+ final Object obj,
+ final String msg
+ )
+ {
+ isTrue( null == obj, msg );
+ }
+
+ /**
+ * Assert that <code>obj</code> is <code>null</code>
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>obj</code> is <code>null</code>
+ *
+ * @param obj object to check
+ * @param msg exception's message to throw
+ *
+ * @see #isFalse(boolean, String)
+ */
+ public static
+ void
+ notNull(
+ final Object obj,
+ final String msg
+ )
+ {
+ isFalse( null == obj, msg );
+ }
+
+ /**
+ * Assert that <code>obj</code> is <code>null</code>
+ *
+ * Throw {@link IllegalArgumentException} with "Object must be null" message
+ *
+ * if <code>obj</code> is not <code>null</code>
+ *
+ * @param obj object to check
+ *
+ * @see #isNull(Object, String)
+ */
+ public static
+ void
+ isNull(
+ final Object obj
+ )
+ {
+ isNull( obj, "Object must be null" );
+ }
+
+ /**
+ * Assert that <code>obj</code> is not <code>null</code>
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>obj</code> is <code>null</code>
+ *
+ * @param obj object to check
+ *
+ * @see #notNull(Object, Object)
+ */
+ public static
+ void
+ notNull(
+ final Object obj
+ )
+ {
+ notNull( obj, "Object must NOT be null" );
+ }
+
+
+ /**
+ * Assert that two objects( <code>obj1</code> and <code>obj2</code> ) is equal.
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if two objects is not equal
+ *
+ * @param obj1 first object to compare
+ * @param obj2 second object to compare
+ * @param msg exception's message to throw
+ *
+ * @see #fail(Object)
+ */
+ public static
+ void
+ isEqual(
+ final Object obj1,
+ final Object obj2,
+ final String message
+ )
+ {
+ if ( ObjectUtil.equals( obj1, obj2 ) )
+ {
+ return ;
+ }
+
+ fail( message );
+ }
+
+
+ /**
+ * Assert that two objects( <code>obj1</code> and <code>obj2</code> ) is equal.
+ *
+ * Throw {@link IllegalArgumentException} with "Objects are not equal" message
+ *
+ * if two objects is not equal
+ *
+ * @param obj1 first object to compare
+ * @param obj2 second object to compare
+ *
+ * @see #isEqual(Object, Object, String)
+ */
+ public static
+ void
+ isEqual(
+ final Object obj1,
+ final Object obj2
+ )
+ {
+ isEqual( obj1, obj2, "Objects are not equal" );
+ }
+
+ /**
+ * Assert that <code>text</code> has any readible character
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>text</code> is <code>null</code> or empty string.
+ *
+ * @param text string to check
+ * @param msg exception's message to throw
+ *
+ * @see #fail(Object)
+ */
+ public static
+ void
+ hasLength(
+ final String text,
+ final String msg
+ )
+ {
+ if( StringUtil.hasLength( text ) )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+ /**
+ * Assert that <code>text</code> has any readible character
+ *
+ * Throw {@link IllegalArgumentException} with "String argument must have length; it must not be null or empty" message
+ *
+ * if <code>text</code> is <code>null</code> or empty string.
+ *
+ * @param text string to check
+ *
+ * @see #hasLength(String, String)
+ */
+ public static
+ void
+ hasLength(
+ final String text
+ )
+ {
+ hasLength( text, "String argument must have length; it must not be null or empty" );
+ }
+
+
+ /**
+ * Assert that <code>text</code> has any readible character
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>text</code> is <code>null</code>, empty string or string containing only unvisible character
+ *
+ * @param text string to check
+ * @param msg exception's message to throw
+ *
+ * @see #fail(Object)
+ */
+ public static
+ void
+ hasText(
+ final String text,
+ final String message
+ )
+ {
+ if ( StringUtil.hasText( text ) )
+ {
+ return ;
+ }
+ fail( message );
+ }
+
+ /**
+ * Assert that <code>text</code> has any readible character
+ *
+ * Throw {@link IllegalArgumentException} with "String argument must have text; it must not be null, empty, or blank" message
+ *
+ * if <code>text</code> is <code>null</code>, empty string or string containing only unvisible character
+ *
+ * @param text string to check
+ *
+ * @see #hasText(String, String)
+ */
+ public static
+ void
+ hasText(
+ final String text
+ )
+ {
+ hasText( text, "String argument must have text; it must not be null, empty, or blank" );
+ }
+
+ /**
+ * Assert that <code>textToSearch</code> does not have <code>substring</code> in part.
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if assertion is failure.
+ *
+ * Assertion is successful if <code>textToSearch</code> or <code>substring</code> is <code>null</code>.
+ *
+ * @param textToSearch search target string
+ * @param substring keyword to search
+ * @param msg exception's message to throw
+ *
+ * @see String#contains(CharSequence)
+ */
+ public static
+ void
+ doesNotContain(
+ final String textToSearch,
+ final String substring,
+ final String msg
+ )
+ {
+ if ( !StringUtil.hasLength( textToSearch ) )
+ {
+ return ;
+ }
+
+ if ( !StringUtil.hasLength( substring ) )
+ {
+ return ;
+ }
+
+ if ( !textToSearch.contains( substring ) )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+
+ /**
+ * Assert that <code>textToSearch</code> does not have <code>substring</code> in part.
+ *
+ * Throw {@link IllegalArgumentException} with "String argument must not contain the substring [<code>substring</code>]" message
+ *
+ * if assertion is failure.
+ *
+ * Assertion is successful if <code>textToSearch</code> or <code>substring</code> is <code>null</code>.
+ *
+ * @param textToSearch search target string
+ * @param substring keyword to search
+ *
+ * @see #doesNotContain(String, String, String)
+ */
+ public static
+ void
+ doesNotContain(
+ final String textToSearch,
+ final String substring
+ )
+ {
+ doesNotContain(
+ textToSearch,
+ substring,
+ "String argument must not contain the substring [" + substring + "]"
+ );
+ }
+
+ /**
+ * Assert that <code>textToSearch</code> has <code>substring</code> in part.
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if assertion is failure.
+ *
+ * Assertion is successful if <code>textToSearch</code> or <code>substring</code> is <code>null</code>.
+ *
+ * @param textToSearch search target string
+ * @param substring keyword to search
+ * @param msg exception's message to throw
+ *
+ * @see String#contains(CharSequence)
+ */
+ public static
+ void
+ contains(
+ final String textToSearch,
+ final String substring,
+ final String msg
+ )
+ {
+ if ( !StringUtil.hasLength( textToSearch ) )
+ {
+ return ;
+ }
+ if ( !StringUtil.hasLength( substring ) )
+ {
+ return ;
+ }
+ if ( textToSearch.contains( substring ) )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+
+ /**
+ * Assert that <code>textToSearch</code> does not have <code>substring</code> in part.
+ *
+ * Throw {@link IllegalArgumentException} with "String argument must contain the substring [<code>substring</code>]" message
+ *
+ * if assertion is failure.
+ *
+ * Assertion is successful if <code>textToSearch</code> or <code>substring</code> is <code>null</code>.
+ *
+ * @param textToSearch search target string
+ * @param substring keyword to search
+ *
+ * @see #doesContain(String, String, String)
+ */
+ public static
+ void
+ contains(
+ final String textToSearch,
+ final String substring
+ )
+ {
+ contains(
+ textToSearch,
+ substring,
+ "String argument must contain the substring [" + substring + "]"
+ );
+ }
+
+ /**
+ * Assert that <code>array</code> has a element at least.
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>array</code> is null or empty array.
+ *
+ * @param <T> type of array elemtent
+ * @param array array object to check
+ * @param msg exception's message to throw
+ *
+ * @see ArrayUtil#isEmpty( Object[] )
+ */
+ public static <T>
+ void
+ notEmpty(
+ final T[] array,
+ final String message
+ )
+ {
+ if( ArrayUtil.isEmpty( array ) )
+ {
+ fail( message );
+ }
+ }
+
+ /**
+ * Assert that <code>array</code> has a element at least.
+ *
+ * Throw {@link IllegalArgumentException} with "Array must not be empty: it must contain at least 1 element" message
+ *
+ * if <code>array</code> is null or empty array.
+ *
+ * @param <T> type of array elemtent
+ * @param array array object to check
+ * @param msg exception's message to throw
+ *
+ * @see #notEmpty( Object[] )
+ */
+ public static
+ void
+ notEmpty(
+ final Object[] array
+ )
+ {
+ notEmpty( array, "Array must not be empty: it must contain at least 1 element" );
+ }
+
+ /**
+ * Assert that there is no <code>null</code> in array elements
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>array</code> has null element.
+ *
+ * @param array array to check
+ * @param msg exception's message to throw
+ *
+ * @see #fail(Object)
+ */
+ public static
+ void
+ noNullElements(
+ final Object[] array,
+ final String msg
+ )
+ {
+
+ for ( int i=0, n=ArrayUtil.size( array ) ; i<n ; ++i )
+ {
+ if ( null != array[i] )
+ {
+ continue;
+ }
+
+ fail( msg );
+ }
+ }
+
+ /**
+ * Assert that there is no <code>null</code> in array elements
+ *
+ * Throw {@link IllegalArgumentException} with "Array must not contain any null elements" message
+ *
+ * if <code>array</code> has null element.
+ *
+ * @param array array to check
+ *
+ * @see #noNullElements(Object[], String)
+ */
+ public static
+ void
+ noNullElements(
+ final Object[] array
+ ) {
+ noNullElements( array, "Array must not contain any null elements" );
+ }
+
+
+ /**
+ * Assert that <code>collection</code>is not empty
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>collection</code> has no element
+ *
+ * @param collection {@link Collection} to check
+ * @param msg exception's message to throw
+ *
+ * @see CollectionUtil#isEmpty( Collection )
+ * @see #fail(Object)
+ */
+ public static
+ void
+ notEmpty(
+ final Collection<?> collection,
+ final String msg
+ )
+ {
+ if( !CollectionUtil.isEmpty( collection ) )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+
+ /**
+ * Assert that <code>collection</code>is not empty
+ *
+ * Throw {@link IllegalArgumentException} with "Collection must not be empty: it must contain at least 1 element" message
+ *
+ * if <code>collection</code> has no element
+ *
+ * @param collection {@link Collection} to check
+ *
+ * @see #notEmpty(Collection, String)
+ */
+ public static
+ void
+ notEmpty(
+ final Collection<?> collection
+ )
+ {
+ notEmpty( collection, "Collection must not be empty: it must contain at least 1 element" );
+ }
+
+ /**
+ * Assert that <code>map</code>is not empty
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>map</code> has no element
+ *
+ * @param map {@link Map} to check
+ * @param msg exception's message to throw
+ *
+ * @see MapUtil#isEmpty( Map )
+ * @see #fail(Object)
+ */
+ public static
+ void
+ notEmpty(
+ final Map<?, ?> map,
+ final String msg
+ )
+ {
+ if ( !MapUtil.isEmpty( map ) )
+ {
+ return ;
+ }
+ fail( msg );
+ }
+
+ /**
+ * Assert that <code>map</code>is not empty
+ *
+ * Throw {@link IllegalArgumentException} with "Map must not be empty; it must contain at least one entry" message
+ *
+ * if <code>map</code> has no element
+ *
+ * @param map {@link Map} to check
+ *
+ * @see #notEmpty(Map, String)
+ */
+ public static
+ void
+ notEmpty(
+ final Map<?, ?> map
+ )
+ {
+ notEmpty( map, "Map must not be empty; it must contain at least one entry" );
+ }
+
+ /**
+ * Assert that <code>obj</code> is instance of <code>type</code>
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>obj</code> is <code>null</code> or not instance of <code>type</code>
+ *
+ * @param type {@link Class} to check
+ * @param obj instance object to check
+ * @param msg exception's message to throw
+ *
+ * @see Class#isInstance(Object)
+ * @see #fail(Object)
+ */
+ public static
+ void
+ isInstanceOf(
+ final Class<?> type,
+ final Object obj,
+ final String msg
+ )
+ {
+ notNull( type, "Type to check against must not be null" );
+ if( type.isInstance( obj ) )
+ {
+ return ;
+ }
+
+ fail( MessageFormat.format(
+ "{0}, Object of class [{1}] must be aan instance of {2}",
+ msg,
+ (( null == obj ) ?"null":obj.getClass().getName()),
+ type
+ ) );
+ }
+
+ /**
+ * Assert that <code>obj</code> is instance of <code>type</code>
+ *
+ * Throw {@link IllegalArgumentException}
+ *
+ * if <code>obj</code> is <code>null</code> or not instance of <code>type</code>
+ *
+ * @param type {@link Class} to check
+ * @param obj instance object to check
+ *
+ * @see #isInstanceOf(Class, Object, String)
+ */
+ public static
+ void
+ isInstanceOf(
+ final Class<?> type,
+ final Object obj
+ )
+ {
+ isInstanceOf( type, obj, "" );
+ }
+
+ /**
+ * Assert that <code>superType</code> is assignable type from <code>subType</code> instance
+ *
+ * Throw {@link IllegalArgumentException} with <code>msg</code> message
+ *
+ * if <code>superType</code> or <code>subType</code> is <code>null</code> or if assertion is failure
+ *
+ * @param superType super type candidate
+ * @param subType subtype candidate
+ * @param msg exception's message to throw
+ *
+ * @see Class#isAssignableFrom(Class)
+ * @see #fail(Object)
+ */
+ public static
+ void
+ isAssignable(
+ final Class<?> superType,
+ final Class<?> subType,
+ final String msg
+ )
+ {
+ notNull( superType, "Type to check against must not be null" );
+ notNull( subType, "Type to assign must not be null" );
+ if( superType.isAssignableFrom( subType ) )
+ {
+ return ;
+ }
+ fail( MessageFormat.format(
+ "{0}, {1} is not assignable to {2}",
+ msg,
+ subType,
+ superType
+ ) );
+ }
+
+ /**
+ * Assert that <code>superType</code> is assignable type from <code>subType</code> instance
+ *
+ * Throw {@link IllegalArgumentException}
+ *
+ * if <code>superType</code> or <code>subType</code> is <code>null</code> or if assertion is failure
+ *
+ * @param superType super type candidate
+ * @param subType subtype candidate
+ *
+ * @see #isAssignable(Class, Class, String)
+ */
+ public static
+ void
+ isAssignable(
+ final Class<?> superType,
+ final Class<?> subType
+ )
+ {
+ isAssignable( superType, subType, "" );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/BrowserWrapper.java b/org.tizen.common/src/org/tizen/common/util/BrowserWrapper.java
index 87c370476..96111daa3 100644
--- a/org.tizen.common/src/org/tizen/common/util/BrowserWrapper.java
+++ b/org.tizen.common/src/org/tizen/common/util/BrowserWrapper.java
@@ -25,6 +25,8 @@
package org.tizen.common.util;
+import static org.tizen.common.util.SWTUtil.asyncExec;
+
import java.io.File;
import org.eclipse.swt.SWT;
@@ -52,8 +54,7 @@ public class BrowserWrapper {
}
public void setInput(final File f) {
- browser.getDisplay().asyncExec(new Runnable() {
- @Override
+ asyncExec(new Runnable() {
public void run() {
if (!browser.isDisposed()) {
browser.setUrl(f.getAbsolutePath());
diff --git a/org.tizen.common/src/org/tizen/common/util/CipherUtil.java b/org.tizen.common/src/org/tizen/common/util/CipherUtil.java
new file mode 100644
index 000000000..6bf9a91eb
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/CipherUtil.java
@@ -0,0 +1,97 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Ho Namkoong <ho.namkoong@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESedeKeySpec;
+
+import org.tizen.common.util.log.Logger;
+
+import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
+
+/**
+ * CipherUtil
+ *
+ * This is a util class for encrypting and decrypting plain texts.
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+public class CipherUtil {
+
+ private static final String password = "KYANINYLhijklmnopqrstuvwx";
+ private static SecretKey SECRETE_KEY;
+ private static Cipher DES_CIPHER;
+ private static final String ALGORITHM = "DESede";
+
+ static {
+ try {
+ byte key[] = password.getBytes();
+ DESedeKeySpec desKeySpec = new DESedeKeySpec(key);
+ SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
+ SECRETE_KEY = keyFactory.generateSecret(desKeySpec);
+
+ DES_CIPHER = Cipher.getInstance(ALGORITHM + "/ECB/PKCS5Padding");
+ } catch (Throwable t) {
+ Logger.error("Exception occurred while creating secret key", t);
+ }
+ }
+
+ private static byte[] decryptByDES(byte[] bytes) throws Exception{
+ DES_CIPHER.init(Cipher.DECRYPT_MODE, SECRETE_KEY);
+
+ return DES_CIPHER.doFinal(bytes);
+ }
+
+ private static byte[] encryptByDES(String s) throws Exception {
+ DES_CIPHER.init(Cipher.ENCRYPT_MODE, SECRETE_KEY);
+
+ return DES_CIPHER.doFinal(s.getBytes());
+ }
+
+ /**
+ * Decrypt cipher message
+ *
+ * @param s cipher message which will be decrypted.
+ * @return decrypted plain text.
+ * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+ public static String getDecryptedString(String s) throws Exception {
+ return new String(decryptByDES(Base64.decode(s)));
+ }
+
+ /**
+ * Encrypt plain text
+ *
+ * @param s plain text which will be encrypted.
+ * @return encrypted cipher text.
+ * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+ public static String getEncryptedString(String s) throws Exception {
+ return new String(Base64.encode(encryptByDES(s)));
+ }
+} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/util/CollectionMap.java b/org.tizen.common/src/org/tizen/common/util/CollectionMap.java
new file mode 100644
index 000000000..903757962
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/CollectionMap.java
@@ -0,0 +1,232 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+
+
+/**
+ * CollectionUtil.
+ *
+ * Helper related to collection( Set, List, etc )
+ *
+ * Characters for both {@link Collection} and {@link Map}
+ *
+ * You can add and remove not only key-value pair but also a set of key-value
+ *
+ * Replace key-value set to <code>null</code> if no values
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @param <K> key type
+ * @param <V> value type
+ */
+public class
+CollectionMap<K, V>
+{
+
+ /**
+ * Map to manage key-values
+ */
+ protected final HashMap<K, Collection<V>> map = new LinkedHashMap<K, Collection<V>>();
+
+
+ /**
+ * Create values container
+ *
+ * Determine a method for management of values
+ *
+ * Modify this method if you want to change value container
+ *
+ * @return value containing {@link Collection}
+ */
+ protected
+ Collection<V>
+ createValues()
+ {
+ return new ArrayList<V>();
+ }
+
+ /**
+ * Add key-value pair
+ *
+ * @param key key to add
+ * @param value value to add
+ */
+ public
+ void
+ put(
+ final K key,
+ final V value
+ )
+ {
+ Collection<V> values = map.get( key );
+ if ( null == values )
+ {
+ values = createValues();
+ map.put( key, values );
+ }
+
+ values.add( value );
+ }
+
+ /**
+ * Return keys
+ *
+ * @return {@link Collection} for key
+ *
+ * @see java.util.Map#keySet()
+ */
+ public
+ Collection<K>
+ keySet() {
+ return map.keySet();
+ }
+
+ /**
+ * Return values for <code>key</code>
+ *
+ * Return <code>null</code> if no values
+ *
+ * @param key key for values
+ *
+ * @return key related values
+ */
+ public
+ Collection<V>
+ get(
+ final K key
+ )
+ {
+ return map.get( key );
+ }
+
+ /**
+ * Replace a set of key-values
+ *
+ * @param key key for key-valeus
+ * @param values values for key-values
+ *
+ * @return old values for <code>key</code>
+ */
+ public
+ Collection<V>
+ set(
+ final K key,
+ final Collection<V> values
+ )
+ {
+ return map.put( key, values );
+ }
+
+ /**
+ * Remove a set of key-values
+ *
+ * @param key key for key-values
+ *
+ * @return values to be removed
+ */
+ public
+ Collection<V>
+ remove(
+ final K key
+ )
+ {
+ return map.remove( key );
+ }
+
+ /**
+ * Remove key-value pair from a set and return values after change
+ *
+ * Return <code>null</code> if no values
+ *
+ * @param key key for key-value
+ * @param value value for key-value
+ *
+ * @return values after change
+ */
+ public
+ Collection<V>
+ remove(
+ final K key,
+ final V value
+ )
+ {
+ final Collection<V> values = map.get( key );
+ values.remove( value );
+
+ if ( values.isEmpty() )
+ {
+ map.remove( key );
+ return null;
+ }
+
+ return values;
+ }
+
+ /**
+ * Remove all sets
+ */
+ public
+ void
+ clear()
+ {
+ map.clear();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ final StringBuilder buffer = new StringBuilder();
+
+ buffer.append( "CollectionMap[" );
+
+ boolean bInit = false;
+
+ for ( final K key : map.keySet() )
+ {
+ if ( bInit )
+ {
+ buffer.append( ", " );
+ }
+ bInit = true;
+ buffer.append( key );
+ buffer.append( '=' );
+ buffer.append( map.get( key ) );
+ }
+
+ buffer.append( "]" );
+
+ return buffer.toString();
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/CollectionUtil.java b/org.tizen.common/src/org/tizen/common/util/CollectionUtil.java
new file mode 100644
index 000000000..2d5a024f4
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/CollectionUtil.java
@@ -0,0 +1,1890 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.tizen.common.util.StringUtil.EMPTY_STRING;
+import static org.tizen.common.util.StringUtil.NULL_STRING;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+
+import org.tizen.common.util.ArrayUtil.ArrayIterator;
+
+/**
+ * CollectionUtil.
+ *
+ * Helper related to collection( Set, List, etc )
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class CollectionUtil
+{
+
+ /**
+ * Empty bytes
+ */
+ protected static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
+ protected static final byte[] EMPTY_BYTES = EMPTY_BYTE_ARRAY;
+
+ private static final String ARRAY_START = "{";
+
+ private static final String ARRAY_END = "}";
+
+ private static final String EMPTY_ARRAY = ARRAY_START + ARRAY_END;
+
+ private static final String ARRAY_ELEMENT_SEPARATOR = ", ";
+
+ private static final Set<Class<?>> APPROXIMABLE_COLLECTION_TYPES =
+ Collections.unmodifiableSet( new HashSet<Class<?>>( Arrays.asList( new Class<?>[] {
+ Collection.class,
+ Set.class, HashSet.class, SortedSet.class, LinkedHashSet.class, TreeSet.class,
+ List.class, LinkedList.class, ArrayList.class
+ } ) ) );
+
+ private static final Set<Class<?>> APPROXIMABLE_MAP_TYPES =
+ Collections.unmodifiableSet( new HashSet<Class<?>>( Arrays.asList( new Class<?>[] {
+ Map.class, SortedMap.class, HashMap.class, LinkedHashMap.class, TreeMap.class
+ } ) ) );
+
+
+
+ /* Object */
+ /**
+ * Empty Collection
+ */
+ public static final Collection<Object> EMPTY_COLLECTION =
+ Collections.unmodifiableCollection( new ArrayList<Object>() );
+
+ /**
+ * protected constructor
+ */
+ protected CollectionUtil() {}
+
+ /**
+ * <p>
+ * check <code>collection</code> has no element.
+ *
+ * use without null check.
+ *
+ * Old style
+ *
+ * <code>
+ * List list = null;
+ * ...
+ * if ( null != list && !list.isEmpty() ) {
+ * ...
+ * }
+ * </code>
+ *
+ * Usage :
+ * <p>
+ *
+ * <code>
+ * List list = null;
+ * ...
+ * if ( !CollectionUtil.isEmpty( list ) ) {
+ * ...
+ * }
+ * </code>
+ *
+ * or "import static" style if you use JDK6
+ *
+ * </code>
+ * import static org.tizen.common.util.CollectionUtil.isEmpty;
+ *
+ * ...
+ * List list = null;
+ * ...
+ * if ( !isEmpty( list ) ) {
+ * ...
+ * }
+ * </code>
+ *
+ * @param collection {@link Collection} to check
+ *
+ * @return value if collection is empty
+ */
+ public static
+ boolean
+ isEmpty(
+ final Collection<?> collection
+ )
+ {
+ if ( null == collection )
+ {
+ return true;
+ }
+
+ return collection.isEmpty();
+ }
+
+ /**
+ * <p>
+ * Return <code>collection</code>'s size.
+ *
+ * use without null check.
+ *
+ * Return <code>0</code> if <code>collection</code> is <code>null</code>
+ *
+ * <p>
+ *
+ * Old style
+ * <code>
+ * if ( null != list ) {
+ * for ( int i = 0, n = list.size() ; i < n ; ++i ) {
+ * ...
+ * }
+ * }
+ * </code>
+ *
+ *
+ * <code>
+ * for ( int i = 0, n = CollectionUtil.size( list ) ; i < n ; ++i ) {
+ * ...
+ * }
+ *
+ * </code>
+ * or "import static" style if you use JDK6
+ *
+ * </code>
+ * import static org.tizen.common.util.CollectionUtil.isEmpty;
+ * ...
+ *
+ * for ( int i = 0, n = size( list ) ; i < n ; ++i ) {
+ * ...
+ * }
+ *
+ * </code>
+ *
+ * @param collection {@link Collection} to check
+ *
+ * @return size of <code>collection</code>
+ *
+ * @see Collection#size()
+ */
+ public static
+ int
+ size(
+ final Collection<?> collection
+ )
+ {
+ if ( null == collection )
+ {
+ return 0;
+ }
+
+ return collection.size();
+ }
+
+ /**
+ * <p>
+ * run <code>runner</code> iterateing element of <code>collection</code>.
+ *
+ * use without null-check for <code>collection</code>
+ *
+ * delegate error handling to <code>runner</code>
+ * </p>
+ *
+ * <code>
+ *
+ * CollectionUtil.iterate(
+ * new ArrayList<String>( Arrays.asList( "hello", "Hello", "World", null, "Test" ) ),
+ * new IteratingRunner<String>() {
+ * public void run( String arg ) {
+ * ...
+ * }
+ * }
+ * );
+ *
+ * </code>
+ *
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} containing element
+ * @param runner {@link Runnable} to execute
+ *
+ * @throws InvocationTargetException when <code>runner</code>'s {@link Runnable#run()} throws exception
+ *
+ * @see {@link #iterate(Collection, IteratingRunner, boolean)}
+ * @see FilterIterator
+ */
+ public static <T>
+ void
+ iterate(
+ final Collection<? extends T> collection,
+ final IteratingRunner<T> runner
+ )
+ throws InvocationTargetException
+ {
+ iterate( collection, runner, false );
+ }
+
+ /**
+ * <p>
+ * run <code>runner</code> iterateing element of <code>collection</code>.
+ *
+ * use without null-check for <code>collection</code>
+ *
+ * delegate error handling to <code>runner</code>
+ *
+ * </p>
+ * <code>
+ *
+ * CollectionUtil.iterate(
+ * new ArrayList<String>( Arrays.asList( "hello", "Hello", "World", null, "Test" ) ),
+ * new IteratingRunner<String>() {
+ * public void run( String arg ) {
+ * ...
+ * }
+ * },
+ * true
+ * );
+ *
+ * </code>
+ *
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} containing element
+ * @param runner {@link Runnable} to execute
+ * @param bForceProcess flag to iterate continuously when exception occurs
+ *
+ * @throws InvocationTargetException when <code>runner</code>'s {@link Runnable#run()} throws exception
+ *
+ * @see FilterIterator
+ */
+ public static <T>
+ void
+ iterate(
+ final Collection<? extends T> collection,
+ final IteratingRunner<T> runner,
+ final boolean bForceProcess
+ )
+ throws InvocationTargetException
+ {
+ if ( null == runner )
+ {
+ return ;
+ }
+ if ( isEmpty( collection ) )
+ {
+ return ;
+ }
+
+ for ( final T arg : collection )
+ {
+ if ( null == arg && !bForceProcess )
+ {
+ continue ;
+ }
+ try
+ {
+ runner.run( arg );
+ } catch ( Throwable e )
+ {
+ if ( !bForceProcess )
+ {
+ throw new InvocationTargetException( e );
+ }
+ }
+ }
+ }
+
+ /**
+ * <p>
+ * fiter <code>collection</code> to <code>result</code> using <code>runner</code>
+ *
+ * determined if stop or keep going using <code>bForceProcess</code> in case of exception.
+ * </p>
+ *
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} to filter
+ * @param results collection to save result
+ * @param runner object to determine if filter
+ * @param bForceProcess flag to keep going when exception occurs
+ *
+ * @throws InvocationTargetException when <code>runner</code>'s {@link Runnable#run()} throws exception
+ */
+ public static <T>
+ void
+ filter(
+ final Collection<? extends T> collection,
+ final Collection<T> results,
+ final IteratingAcceptor<T> runner,
+ final boolean bForceProcess
+ ) throws InvocationTargetException
+ {
+ if ( null == results )
+ {
+ return ;
+ }
+ if ( isEmpty( collection ) )
+ {
+ return ;
+ }
+
+ for ( final T arg : collection )
+ {
+ if ( null == arg && !bForceProcess )
+ {
+ continue ;
+ }
+ try
+ {
+ if ( runner.accept( arg ) )
+ {
+ results.add( arg );
+ }
+ } catch ( Throwable e )
+ {
+ if ( !bForceProcess )
+ {
+ throw new InvocationTargetException( e );
+ }
+ }
+
+ }
+ }
+
+ /**
+ * <p>
+ * Return first element in <code>collection</code><br>
+ *
+ * Return <code>null</code> if <code>collection</code> is null or empty
+ * </p>
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} to check
+ *
+ * @return first elemtn in <code>collection</code>
+ */
+ public static <T>
+ T
+ pickupFirst( final Collection<T> collection )
+ {
+ if ( isEmpty( collection ) )
+ {
+ return null;
+ }
+
+ final Iterator<T> iter = collection.iterator();
+ return (iter.hasNext())?(iter.next()):null;
+ }
+
+ /**
+ * <p>
+ * Extract and return first element in <code>collection</code><br>
+ *
+ * Return <code>null</code> if <code>collection</code> is null or empty
+ * </p>
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} to check
+ *
+ * @return first elemtn in <code>collection</code>
+ */
+ public static <T>
+ T
+ removeFirst( final Collection<T> collection )
+ {
+ if ( isEmpty( collection ) )
+ {
+ return null;
+ }
+
+ final Iterator<T> iter = collection.iterator();
+ if ( iter.hasNext() )
+ {
+ T ret = iter.next();
+ iter.remove();
+ return ret;
+ }
+ return null;
+ }
+
+
+ /**
+ * <p>
+ * Return last element in <code>collection</code><br>
+ *
+ * Return <code>null</code> if <code>collection</code> is null or empty
+ *
+ * Don't use this in case of big data or looping algorithm
+ * </p>
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} to check
+ *
+ * @return last elemtn in <code>collection</code>
+ */
+ public static <T>
+ T
+ pickupLast( final Collection<T> collection )
+ {
+ if ( isEmpty( collection ) )
+ {
+ return null;
+ }
+
+ final Iterator<T> iter = collection.iterator();
+
+ T temp = null;
+ while ( iter.hasNext() )
+ {
+ temp = iter.next();
+ }
+ return temp;
+ }
+
+ /**
+ * <p>
+ * Extract and return last element in <code>collection</code><br>
+ *
+ * Return <code>null</code> if <code>collection</code> is null or empty
+ *
+ * Don't use this in case of big data or looping algorithm
+ * </p>
+ * @param <T> type of element in <code>collection</code>
+ * @param collection {@link Collection} to check
+ *
+ * @return last elemtn in <code>collection</code>
+ */
+ public static <T>
+ T
+ removeLast( final Collection<T> collection )
+ {
+ if ( isEmpty( collection ) )
+ {
+ return null;
+ }
+
+ final Iterator<T> iter = collection.iterator();
+
+ T temp = null;
+ while ( iter.hasNext() )
+ {
+ temp = iter.next();
+ }
+ iter.remove();
+ return temp;
+ }
+
+ /**
+ * Convert {@link Enumeration} to {@link Iterator} using decoration pattern
+ *
+ * @param <K> element type to be handled by enumertaion
+ */
+ static class
+ EnumerationAdapter<K>
+ implements Iterator<K>
+ {
+ protected final Enumeration<K> enumeration;
+ /**
+ * Constructor with {@link Enumeration}
+ *
+ * @param enumeration {@link Enumeration} to convert
+ */
+ public
+ EnumerationAdapter(
+ final Enumeration<K> enumeration
+ )
+ {
+ if ( null == enumeration )
+ { // Fast fail
+ throw new NullPointerException();
+ }
+
+ this.enumeration = enumeration;
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#hasNext()
+ */
+ @Override
+ public
+ boolean
+ hasNext()
+ {
+ return enumeration.hasMoreElements();
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#next()
+ */
+ @Override
+ public
+ K
+ next()
+ {
+ return enumeration.nextElement();
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#remove()
+ */
+ @Override
+ public
+ void
+ remove()
+ {
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ /**
+ *
+ * Return Iterator to be converted from <code>enumeration</code>
+ *
+ * @param <E> element type interating <code>enumeration</code>
+ * @param enumeration {@link Enumeration} object to be converted
+ *
+ * @return converted {@link Iterator}
+ */
+ public
+ static <E>
+ Iterator<E>
+ iterator(
+ final Enumeration<E> enumeration
+ ) {
+ return new EnumerationAdapter<E>( enumeration );
+ }
+
+
+ /**
+ * Convert array object to {@link List}
+ *
+ * @param source array candidate object
+ *
+ * @return converted {@link List}
+ */
+ public static
+ List<?>
+ asList(
+ final Object source
+ )
+ {
+ return Arrays.asList( ArrayUtil.toObjectArray( source ) );
+ }
+
+ /**
+ *
+ * Add array object to <code>collection</code>
+ *
+ * @param array array candidate object to be added
+ * @param collection {@link Collection} to add
+ *
+ * @see ArrayUtil#toObjectArray(Object)
+ */
+ public static
+ void
+ mergeArrayIntoCollection(
+ final Object array,
+ final Collection<Object> collection
+ )
+ {
+ if ( null == collection )
+ {
+ throw new NullPointerException();
+ }
+
+ final Object[] arr = ArrayUtil.toObjectArray( array );
+ for ( int i=0, n=arr.length ; i<n ; ++i )
+ {
+ collection.add( arr[i] );
+ }
+ }
+
+ /**
+ * Check if <code>iterator</code> meet <code>element</code> in iteration
+ *
+ * @param iterator iterating object
+ * @param element object to check
+ *
+ * @return <code>true</code> if <code>iterator</code> meet <code>element</code>
+ */
+ public static
+ boolean
+ contains(
+ final Iterator<Object> iterator,
+ final Object element
+ )
+ {
+ if ( null == iterator )
+ {
+ return false;
+ }
+
+ while ( iterator.hasNext() )
+ {
+ final Object candidate = iterator.next();
+ if ( ObjectUtil.equals( candidate, element ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check if <code>enumeration</code> meet <code>element</code> in iteration
+ *
+ * @param enumeration iterating object
+ * @param element object to check
+ *
+ * @return <code>true</code> if <code>enumeration</code> meet <code>element</code>
+ */
+ public static
+ boolean
+ contains(
+ final Enumeration<Object> enumeration,
+ final Object element
+ )
+ {
+ if ( null == enumeration )
+ {
+ return false;
+ }
+ while( enumeration.hasMoreElements() )
+ {
+ final Object candidate = enumeration.nextElement();
+ if ( ObjectUtil.equals( candidate, element ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+
+ /**
+ * Check if <code>collection</code> contains <code>element</code>
+ *
+ * @param collection {@link Collection} to check
+ * @param element object to check
+ *
+ * @return <code>true</code> if <code>collection</code> contain <code>element</code>
+ */
+ public static
+ boolean
+ contains(
+ final Collection<Object> collection,
+ final Object element
+ )
+ {
+ if ( null == collection )
+ {
+ return false;
+ }
+ for ( final Object candidate : collection )
+ {
+ if ( ObjectUtil.equals( candidate, element ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check and return if <code>source</code> contain any element of <code>candidates</code>
+ *
+ * @param source {@link Collection} to check
+ * @param candidates {@link Collection} whose element is expected in <code>source</code>
+ *
+ * @return <code>true</code> if <code>source</code> contain any elemnt of <code>candidates</code>
+ */
+ public static
+ boolean
+ containsAny(
+ final Collection<?> source,
+ final Collection<?> candidates
+ )
+ {
+ if ( isEmpty( source ) || isEmpty( candidates) )
+ {
+ return false;
+ }
+
+ for ( final Object candidate : candidates )
+ {
+ if ( source.contains( candidate ) )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check <code>collectionType</code> is approximable collection type
+ *
+ * @param collectionType type to check
+ *
+ * @return <code>true</code> if <code>collectionType</code> is in {@link #APPROXIMABLE_COLLECTION_TYPES}
+ *
+ * @see #APPROXIMABLE_COLLECTION_TYPES
+ */
+ public static
+ boolean
+ isApproximableCollectionType(
+ final Class<?> collectionType
+ )
+ {
+ return APPROXIMABLE_COLLECTION_TYPES.contains( collectionType );
+ }
+
+ /**
+ * Check <code>mapType</code> is approximable map type
+ *
+ * @param mapType type to check
+ *
+ * @return <code>true</code> if <code>mapType</code> is in {@link #APPROXIMABLE_MAP_TYPES}
+ *
+ * @see #APPROXIMABLE_MAP_TYPES
+ */
+ public static
+ boolean
+ isApproximableMapType(
+ final Class<?> mapType
+ )
+ {
+ return APPROXIMABLE_MAP_TYPES.contains( mapType );
+ }
+
+ /**
+ * Create <code>collection</code> matched approximable collection
+ *
+ * @param <K> containing type
+ * @param collection {@link Collection} to convert
+ * @param initialCapacity initial size of created collection
+ *
+ * @return created approximable collection
+ */
+ public static <K>
+ Collection<K>
+ createApproximableCollection(
+ final Collection<K> collection,
+ final int initialCapacity
+ )
+ {
+ if ( collection instanceof LinkedList<?> )
+ {
+ return new LinkedList<K>();
+ }
+ else if ( collection instanceof List<?> )
+ {
+ return new ArrayList<K>( initialCapacity);
+ }
+ else if ( collection instanceof SortedSet<?> )
+ {
+ return new TreeSet<K>( ( (SortedSet<K>)collection).comparator() );
+ }
+ else
+ {
+ return new LinkedHashSet<K>( initialCapacity);
+ }
+ }
+
+ /**
+ * @param <K> Map's Key type
+ * @param <V> Map's Value type
+ * @param map Map argument
+ * @param initialCapacity initial argument for Map which will be created
+ *
+ * @return created ApproximableMap
+ */
+ public static <K, V>
+ Map<K, V>
+ createApproximableMap(
+ final Map<K, V> map,
+ final int initialCapacity
+ )
+ {
+ if ( map instanceof SortedMap<?, ?> )
+ {
+ return new TreeMap<K, V>( ( (SortedMap<K, V>) map).comparator() );
+ }
+ else
+ {
+ return new LinkedHashMap<K, V>( initialCapacity );
+ }
+ }
+
+ /* print */
+
+ /**
+ * Converts <code>obj</code> object to String.
+ *
+ * @param obj object to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final Object obj
+ )
+ {
+ if ( null == obj )
+ {
+ return NULL_STRING;
+ }
+
+ if ( obj instanceof String )
+ {
+ return (String) obj;
+ }
+ else if ( obj instanceof Object[] )
+ {
+ return toString( ( Object[] ) obj );
+ }
+ else if ( obj instanceof boolean[] )
+ {
+ return toString( ( boolean[] ) obj );
+ }
+ else if ( obj instanceof byte[] )
+ {
+ return toString( ( byte[] )obj );
+ }
+ else if ( obj instanceof char[] )
+ {
+ return toString( ( char[] ) obj );
+ }
+ else if ( obj instanceof double[] )
+ {
+ return toString( ( double[] ) obj );
+ }
+ else if ( obj instanceof float[] )
+ {
+ return toString( (float[] ) obj );
+ }
+ else if ( obj instanceof int[] )
+ {
+ return toString( (int[] ) obj );
+ }
+ else if ( obj instanceof long[] )
+ {
+ return toString( ( long[] ) obj );
+ }
+ else if ( obj instanceof short[] )
+ {
+ return toString( ( short[] )obj );
+ }
+ return ObjectUtil.nvl( obj.toString(), EMPTY_STRING );
+ }
+
+ /**
+ * Converts <code>array</code> boolean[] to String.
+ *
+ * @param array boolean[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final boolean[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ final int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer= new StringBuilder();
+
+ buffer.append( ARRAY_START);
+ for ( int i=0 ; i<length ; ++i )
+ {
+ if ( 0 != i ) {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( toString( array[i] ) );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> byte[] to String.
+ *
+ * @param array byte[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final byte[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ final int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer= new StringBuilder();
+
+ buffer.append( ARRAY_START);
+ for ( int i=0 ; i<length ; ++i )
+ {
+ if ( 0 != i ) {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( toString( array[i] ) );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> char[] to String.
+ *
+ * @param array char[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final char[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ final int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer= new StringBuilder();
+
+ buffer.append( ARRAY_START);
+ for ( int i=0 ; i<length ; ++i )
+ {
+ if ( 0 != i )
+ {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( toString( array[i] ) );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+
+ /**
+ * Converts <code>array</code> short[] to String.
+ *
+ * @param array short[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final short[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ final int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ for( int i=0 ; i<length ; ++i )
+ {
+ if ( 0 == i )
+ {
+ buffer.append( ARRAY_START );
+ }
+ else
+ {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( array[i] );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> int[] to String.
+ *
+ * @param array int[] to String
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final int[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ final int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ for( int i=0 ; i<length ; ++i )
+ {
+ if ( 0 == i )
+ {
+ buffer.append( ARRAY_START );
+ }
+ else
+ {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( array[i] );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> long[] to String.
+ *
+ * @param array long[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final long[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ for( int i=0 ; i<length ; ++i)
+ {
+ if ( 0 == i )
+ {
+ buffer.append( ARRAY_START );
+ }
+ else
+ {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( array[i] );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> double[] to String.
+ *
+ * @param array double[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final double[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ int length= array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ StringBuilder buffer = new StringBuilder();
+ for( int i=0 ; i<length ; ++i )
+ {
+ if ( 0 == i )
+ {
+ buffer.append( ARRAY_START);
+ }
+ else
+ {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR);
+ }
+
+ buffer.append( array[i] );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> float[] to String.
+ *
+ * @param array float[] to convert
+ *
+ * @return converted String
+ */
+ public static
+ String
+ toString(
+ final float[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ for( int i=0 ; i < length ; ++i )
+ {
+ if ( 0 == i )
+ {
+ buffer.append( ARRAY_START );
+ }
+ else
+ {
+ buffer.append( ARRAY_ELEMENT_SEPARATOR );
+ }
+
+ buffer.append( array[i] );
+ }
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Converts <code>array</code> Object[] to String.
+ *
+ * @param array Object[] to convert
+ *
+ * @return converted String
+ */
+ public static <T>
+ String
+ toString(
+ final T[] array
+ )
+ {
+ if ( null == array )
+ {
+ return NULL_STRING;
+ }
+
+ final int length = array.length;
+
+ if ( 0 == length )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer= new StringBuilder();
+
+ buffer.append( ARRAY_START);
+ buffer.append( concatenate( array, ARRAY_ELEMENT_SEPARATOR ) );
+ buffer.append( ARRAY_END );
+ return buffer.toString();
+ }
+
+ /**
+ * Returns a String from <code>array</code> Object[] with String separator.
+ *
+ * @param array Object[] to combine
+ * @param separator the delimiter which is used when Object[] combined
+ *
+ * @return combined String
+ */
+ public static <E>
+ String
+ concatenate(
+ final E[] array,
+ final String separator
+ )
+ {
+ return concatenate( (null==array)?null:new ArrayIterator<E>( array ), separator );
+ }
+
+ /**
+ * Returns a String from col {@link Collection} with String separator.
+ *
+ * @param col {@link Collection} object to combine
+ * @param separator the delimiter which is used when {@link Collection} object combined
+ *
+ * @return combined String
+ */
+ public static <E>
+ String
+ concatenate(
+ final Collection<E> col,
+ final String separator
+ )
+ {
+ return concatenate( (null==col)?(null):col.iterator(), separator );
+ }
+
+ /**
+ * Returns a String from {@link Iterator} with String separator.
+ *
+ * @param iter {@link Iterator} to combine objects
+ * @param separator the delimiter which is used when {@link Iterator} combined
+ *
+ * @return combined String
+ */
+ public static <E>
+ String
+ concatenate(
+ Iterator<E> iter,
+ final String separator
+ )
+ {
+ if ( null == iter )
+ {
+ return NULL_STRING;
+ }
+
+ if ( !iter.hasNext() )
+ {
+ return EMPTY_ARRAY;
+ }
+
+ final StringBuilder buffer= new StringBuilder();
+ boolean bInit = false;
+
+ while ( iter.hasNext() )
+ {
+ Object obj = iter.next();
+ if ( bInit )
+ {
+ buffer.append( separator );
+ }
+ bInit = true;
+
+ buffer.append( toString( obj ) );
+ }
+ return buffer.toString();
+ }
+
+ /* Hash */
+ private static final int MULTIPLIER= 31;
+
+ private static final int INITIAL_HASH = 7;
+
+ /**
+ * Creates hash value about object.
+ * <br>
+ * In case of array, get hash value using object's hash value in the array.
+ *
+ * @param obj object to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final Object obj
+ )
+ {
+ if ( null == obj )
+ {
+ return 0;
+ }
+ if ( obj.getClass().isArray() )
+ {
+ if ( obj instanceof Object[] )
+ {
+ return hashCode( (Object[] )obj );
+ }
+ else if ( obj instanceof boolean[] )
+ {
+ return hashCode( (boolean[] )obj );
+ }
+ else if ( obj instanceof byte[] )
+ {
+ return hashCode( (byte[] )obj);
+ }
+ else if ( obj instanceof char[] )
+ {
+ return hashCode( (char[] )obj);
+ }
+ else if ( obj instanceof double[] )
+ {
+ return hashCode( (double[] )obj);
+ }
+ else if ( obj instanceof float[] )
+ {
+ return hashCode( (float[] )obj);
+ }
+ else if ( obj instanceof int[] )
+ {
+ return hashCode( (int[] )obj);
+ }
+ else if ( obj instanceof long[] )
+ {
+ return hashCode( (long[] )obj);
+ }
+ else if ( obj instanceof short[] )
+ {
+ return hashCode( (short[] )obj);
+ }
+ }
+
+ return obj.hashCode();
+ }
+
+ /**
+ * Returns hash value about <code>array</code> Object[].
+ *
+ * @param array Object[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final Object[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> boolean[].
+ *
+ * @param array boolean[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final boolean[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> int[].
+ *
+ * @param array int[] to get hash value
+ *
+ * @return hash value
+ */
+ public static int
+ hashCode(
+ final byte[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + array[i];
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> char[].
+ *
+ * @param array char[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final char[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> double[].
+ *
+ * @param array double[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final double[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> float[].
+ *
+ * @param array float[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final float[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> int[].
+ *
+ * @param array int[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final int[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> long[].
+ *
+ * @param array long[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final long[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>array</code> short[].
+ *
+ * @param array short[] to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final short[] array
+ )
+ {
+ if ( null == array )
+ {
+ return 0;
+ }
+
+ int hash = INITIAL_HASH;
+ for( int i=0, arraySize=array.length ; i<arraySize ; ++i )
+ {
+ hash = MULTIPLIER * hash + hashCode( array[i] );
+ }
+
+ return hash;
+ }
+
+ /**
+ * Returns hash value about <code>bool</code> boolean.
+ *
+ * @param bool boolean type parameter to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final boolean bool
+ )
+ {
+ return bool ? 1231 : 1237;
+ }
+
+ /**
+ * Return hash value about <code>dbl</code> double.
+ *
+ * @param dbl double type parameter to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final double dbl
+ )
+ {
+ long bits = Double.doubleToLongBits( dbl );
+ return hashCode( bits );
+ }
+
+ /**
+ * Returns hash value about <code>flt</code> float.
+ *
+ * @param flt float type parameter to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ float flt
+ )
+ {
+ return Float.floatToIntBits( flt );
+ }
+
+
+ /**
+ * Returns hash value about <code>lng</code> long.
+ *
+ * @param lng long type parameter to get hash value
+ *
+ * @return hash value
+ */
+ public static
+ int
+ hashCode(
+ final long lng
+ )
+ {
+ return (int) ( lng ^ ( lng >>> 32 ) );
+ }
+
+ /* Equals */
+ /**
+ * Returns whether it is same object type or not by comparing each column's type of {@link Collection} object.
+ *
+ * @param <K> object type about {@link Collection}
+ * @param cols {@link Collection} objects
+ *
+ * @return true if each column's type of the {@link Collection} object is same
+ */
+ @SuppressWarnings("unchecked")
+ public static <K>
+ boolean
+ equals(
+ final Collection<? extends K>... cols
+ )
+ {
+
+ // flag if collection is null
+ boolean bInit = false;
+ int size = 0;
+ for ( final Collection<? extends K> col : cols )
+ {
+ if ( !bInit )
+ {
+ if ( null == col )
+ {
+ size = -1;
+ }
+ else
+ {
+ size = col.size();
+ }
+ bInit = true;
+ }
+ if ( size < 0 )
+ {
+ if ( null != col )
+ {
+ return false;
+ }
+ }
+ else if ( null == col || col.size() != size )
+ {
+ return false;
+ }
+ }
+ if ( size < 0 )
+ {
+ return true;
+ }
+
+ final Iterator<? extends K>[] iters = new Iterator[cols.length];
+ for ( int i = 0, n = iters.length ; i<n ; ++i )
+ {
+ iters[i] = cols[i].iterator();
+ }
+
+ while ( iters[0].hasNext() )
+ {
+ final K obj = iters[0].next();
+ for ( int i = 1, n = iters.length ; i<n ; ++i )
+ {
+ final K other = iters[i].next();
+
+ if ( !ObjectUtil.equals( obj, other ) )
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns whether it is same object type or not by comparing each column's type of Object[].
+ *
+ * @param objsVar target objects
+ *
+ * @return true if each column's type of the Object[] is same
+ *
+ */
+ public static
+ boolean
+ equals(
+ final Object[]... objsVar
+ )
+ {
+ // flag if collection is null
+ boolean bInit = false;
+ int size = 0;
+ for ( final Object[] objs : objsVar )
+ {
+ if ( !bInit )
+ {
+ if ( null == objs )
+ {
+ size = -1;
+ }
+ else
+ {
+ size = objs.length;
+ }
+ bInit = true;
+ }
+ if ( size < 0 )
+ {
+ if ( null != objs )
+ {
+ return false;
+ }
+ }
+ else if ( null == objs || objs.length != size )
+ {
+ return false;
+ }
+ }
+ if ( size < 0 )
+ {
+ return true;
+ }
+
+
+ for ( int i=1, n=objsVar.length ; i<n ; ++i )
+ {
+ for ( int j=0 ; j<size ; ++j )
+ {
+ if ( !ObjectUtil.equals( objsVar[0][j], objsVar[i][j] ) )
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+
+ }
+
+ /**
+ * <p>
+ * Swaps <code><I>i</I></code>th object's location with <code><I>j</I></code>th object in <code>objs</code> Object[].
+ * </p>
+ * @param objs target
+ * @param i location of object to be swapped
+ * @param j location of object to be swapped
+ */
+ public static
+ void
+ swap(
+ final Object[] objs,
+ final int i,
+ final int j
+ )
+ {
+ Object temp = objs[i];
+ objs[i] = objs[j];
+ objs[j] = temp;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/ControlFileConfig.java b/org.tizen.common/src/org/tizen/common/util/ControlFileConfig.java
index c0cb6f545..8e7ddb603 100644
--- a/org.tizen.common/src/org/tizen/common/util/ControlFileConfig.java
+++ b/org.tizen.common/src/org/tizen/common/util/ControlFileConfig.java
@@ -75,8 +75,10 @@ public class ControlFileConfig {
public boolean store(){
File folder = new File(this.path).getParentFile();
- if(folder==null||!folder.exists())
+ if( !folder.exists() )
+ {
folder.mkdirs();
+ }
this.isExist = PropertyUtil.storeProperties(path, props);
return this.isExist;
diff --git a/org.tizen.common/src/org/tizen/common/util/DialogUtil.java b/org.tizen.common/src/org/tizen/common/util/DialogUtil.java
index 3335ba125..8961df713 100644
--- a/org.tizen.common/src/org/tizen/common/util/DialogUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/DialogUtil.java
@@ -26,7 +26,6 @@
package org.tizen.common.util;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
@@ -48,7 +47,7 @@ public abstract class DialogUtil {
}
public static void openMessageDialog(final Shell shell, final String title, final String message) {
- Display.getDefault().syncExec(new Runnable() {
+ SWTUtil.syncExec(new Runnable() {
public void run() {
MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.ICON_INFORMATION);
dialog.setText(title);
@@ -60,7 +59,7 @@ public abstract class DialogUtil {
public static void openProxyDialog(final String text, String message) {
final String msg = message;
- Display.getDefault().syncExec(new Runnable() {
+ SWTUtil.syncExec(new Runnable() {
public void run() {
MessageBox dialog = new MessageBox(new Shell(), SWT.ERROR | SWT.ICON_INFORMATION);
dialog.setText(text);
@@ -83,7 +82,7 @@ public abstract class DialogUtil {
}
public static void openErrorDialog(final Shell shell, final String title, final String message) {
- Display.getDefault().syncExec(new Runnable() {
+ SWTUtil.syncExec(new Runnable() {
public void run() {
MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.ICON_ERROR);
dialog.setText(title);
@@ -106,7 +105,7 @@ public abstract class DialogUtil {
public static int openQuestionDialog(String message) {
synchronized (lockQuestion) {
final String msg = message;
- Display.getDefault().syncExec(new Runnable() {
+ SWTUtil.syncExec(new Runnable() {
public void run() {
MessageBox dialog = new MessageBox(new Shell(), SWT.YES | SWT.NO | SWT.ICON_QUESTION);
dialog.setMessage(msg);
diff --git a/org.tizen.common/src/org/tizen/common/util/EFSUtil.java b/org.tizen.common/src/org/tizen/common/util/EFSUtil.java
new file mode 100755
index 000000000..47d33ea06
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/EFSUtil.java
@@ -0,0 +1,303 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Jihoon Song <jihoon80.song@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.net.URI;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.filesystem.IFileSystem;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.ide.dialogs.IDEResourceInfoUtils;
+import org.eclipse.ui.internal.ide.dialogs.IFileStoreFilter;
+import org.tizen.common.Surrogate;
+import org.tizen.common.core.application.Messages;
+
+/**
+ * EFSUtil.
+ *
+ * Helper related to Eclipse File System
+ *
+ * @author Jihoon Song{@literal <jihoon80.song@samsung.com>} (S-Core)
+ */
+public class EFSUtil {
+
+ public enum DialogChoicer {
+ YesToAll,
+ NoToAll,
+ Yes,
+ No,
+ Cancel;
+
+ /**
+ * Get DialogChoicer's all value
+ *
+ * @return String array with DialogChoicer's values
+ */
+ public static String[] toStringArray() {
+ DialogChoicer[] choicers = DialogChoicer.values();
+ String[] values = new String[choicers.length];
+ for (DialogChoicer choicer : choicers) {
+ values[choicer.ordinal()] = choicer.name();
+ }
+ return values;
+ }
+
+ public static DialogChoicer valueFromOrdinal(int ordinal) {
+ for (DialogChoicer choicer : values()) {
+ if (choicer.ordinal() == ordinal) {
+ return choicer;
+ }
+ }
+ return DialogChoicer.Cancel;
+ }
+ }
+
+ private static Surrogate<IFileSystem> fileSystemSurrogate = new Surrogate<IFileSystem>() {
+ @Override
+ public IFileSystem getAdapter() {
+ return EFS.getLocalFileSystem();
+ }
+ };
+
+ private static final String defaultTask = ""; //$NON-NLS-1$
+ private static final int defaultTicks = 100; // TODO : will add automatically calculate method
+
+ private static final IFileStoreFilter defaultFilter = new IFileStoreFilter() {
+ @Override
+ public boolean accept(IFileStore store) {
+ return true;
+ }
+ };
+
+
+ // Constructor
+ private EFSUtil() {}
+
+ public static void setFileSystemSurrogate(Surrogate<IFileSystem> surrogate) {
+ EFSUtil.fileSystemSurrogate = surrogate;
+ }
+
+ /**
+ * Get IFileSystem based on Surrogate<IFileSystem> for this class
+ *
+ * @return IFileStoreFilter
+ */
+ protected static IFileSystem getFileSystem() {
+ return fileSystemSurrogate.getAdapter();
+ }
+
+ /**
+ * Get a default IFileStoreFilter that always returns true
+ *
+ * @return IFileStoreFilter
+ */
+ public static IFileStoreFilter getDefaultFileStoreFilter() {
+ return defaultFilter;
+ }
+
+ /**
+ * Detect whether resource exist.
+ *
+ * @param fileURI
+ */
+ public static boolean isExistResource(URI fileURI) {
+ IFileStore fileStore = getFileSystem().getStore(fileURI);
+ return isExistResource(fileStore);
+ }
+
+ /**
+ * Detect whether resource exist.
+ *
+ * @param fileStore
+ */
+ public static boolean isExistResource(IFileStore fileStore) {
+ return (fileStore != null) ? fileStore.fetchInfo().exists() : false;
+ }
+
+ /**
+ * Detect whether resource exist. if exist this, open dialog
+ *
+ * @param parentShell dialog's parent shell
+ * @param title dialog title
+ * @param msg dialog message
+ * @param previousChoice previous DialogChoicer value
+ * @param fileStore
+ * @return in case of previousChoice is Yes or No, return user choice status. any else return previous status
+ */
+ public static DialogChoicer isExistResourceWithDialog(Shell parentShell,
+ String title, String msg, DialogChoicer previousChoice, IFileStore fileStore) {
+
+ Assert.notNull(parentShell);
+ Assert.notNull(msg);
+ Assert.notNull(previousChoice);
+ Assert.notNull(fileStore);
+
+ switch (previousChoice) {
+ case Yes :
+ case No :
+ break;
+ case YesToAll :
+ case NoToAll :
+ case Cancel :
+ default :
+ return previousChoice;
+ }
+
+ if (isExistResource( fileStore )) {
+ MessageDialog msgDialog = new MessageDialog(parentShell,
+ title, null, msg, MessageDialog.NONE, DialogChoicer.toStringArray(),
+ DialogChoicer.Cancel.ordinal());
+
+ int msgResult = msgDialog.open();
+
+ return DialogChoicer.valueFromOrdinal(msgResult);
+ }
+
+ return DialogChoicer.Yes;
+ }
+
+ /**
+ * Copy file or directory using Eclipse File System
+ *
+ * @param source the source URI of the copy. If null, NullPointerException occur.
+ * @param destination the destination URI of the copy. If null, NullPointerException occur.
+ * @param options bit-wise or of option flag constants ({@link EFS#OVERWRITE} or {@link EFS#SHALLOW}).
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
+ *
+ * @author Jihoon Song {@literal <jihoon80.song@samsung.com>} (S-Core)
+ */
+ public static void copy(URI source, URI destination, int options,
+ IProgressMonitor monitor) throws CoreException {
+ Assert.notNull(source);
+ Assert.notNull(destination);
+
+ monitor = ObjectUtil.nvl(monitor, new NullProgressMonitor());
+
+ try {
+ monitor.beginTask(defaultTask, defaultTicks);
+
+ getFileSystem().getStore(source).copy(getFileSystem().getStore( destination ), options, monitor);
+ } finally {
+ monitor.done();
+ }
+ }
+
+ /**
+ * Copy file or directory using EFS with IFileStoreFilter.
+ * If file already exist, open selectable message dialog.
+ * If the user selected Cancel, OperationCanceledException occur
+ *
+ * @param source the source URI of the copy. If null, NullPointerException occur.
+ * @param destination the destination URI of the copy. If null, NullPointerException occur.
+ * @param fileFilter the child file filter in source, if <code>null</code>, the default file filter is used
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
+ * @throws CoreException
+ */
+ public static DialogChoicer copyWithFilter(URI source, URI destination, IFileStoreFilter fileFilter,
+ IProgressMonitor monitor) throws CoreException {
+ return copyWithFilter(source, destination, fileFilter, DialogChoicer.Yes, monitor);
+ }
+
+ /**
+ * Copy file or directory using EFS with IFileStoreFilter.
+ * If file already exist, open selectable message dialog.
+ * If the user selected Cancel, OperationCanceledException occur
+ *
+ * @param source the source URI of the copy. If null, NullPointerException occur.
+ * @param destination the destination URI of the copy. If null, NullPointerException occur.
+ * @param fileFilter the child file filter in source, if <code>null</code>, the default file filter is used
+ * @param previousChoice apply user configuration. if YesToAll or NoToAll, don't ask your choice.
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
+ * @throws CoreException
+ */
+ public static DialogChoicer copyWithFilter(URI source, URI destination, IFileStoreFilter fileFilter,
+ DialogChoicer previousChoice, IProgressMonitor monitor) throws CoreException {
+ Assert.notNull(source);
+ Assert.notNull(destination);
+
+ monitor = ObjectUtil.nvl(monitor, new NullProgressMonitor());
+
+ try {
+ monitor.beginTask(defaultTask, defaultTicks);
+
+ // fileFilter must be not null, because IDEResourceInfoUtils don't check null.
+ if (fileFilter == null) {
+ fileFilter = getDefaultFileStoreFilter();
+ }
+
+ return internalCopyWithFilter(getFileSystem().getStore( source ),
+ getFileSystem().getStore( destination ),
+ fileFilter, previousChoice, monitor);
+ } finally {
+ monitor.done();
+ }
+ }
+
+ private static DialogChoicer internalCopyWithFilter(IFileStore source, IFileStore destination,
+ IFileStoreFilter fileFilter, DialogChoicer previousChoice, IProgressMonitor monitor)
+ throws CoreException {
+ Assert.notNull(source);
+ Assert.notNull(destination);
+
+ previousChoice = isExistResourceWithDialog(
+ ViewUtil.getWorkbenchWindow().getShell(), Messages.FileExistDialogTitle,
+ Messages.bind( Messages.FileExistMsg, destination.getName() ),
+ previousChoice, destination);
+
+ switch (previousChoice) {
+ case YesToAll :
+ case Yes :
+ source.copy(destination, EFS.OVERWRITE | EFS.SHALLOW, monitor);
+ break;
+ case Cancel :
+ throw new OperationCanceledException();
+ case NoToAll :
+ case No :
+ break;
+ default:
+ break;
+ }
+ monitor.worked(1);
+
+ // traverse child resources
+ if (source.fetchInfo().isDirectory()) {
+ IFileStore[] childStores = IDEResourceInfoUtils.listFileStores(source, fileFilter, null);
+ for (IFileStore childStore : childStores) {
+ previousChoice = internalCopyWithFilter(childStore,
+ destination.getChild( childStore.getName() ),
+ fileFilter, previousChoice, monitor);
+ }
+ }
+
+ return previousChoice;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/FileUtil.java b/org.tizen.common/src/org/tizen/common/util/FileUtil.java
index eca82e5b4..59befe244 100644
--- a/org.tizen.common/src/org/tizen/common/util/FileUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/FileUtil.java
@@ -1,29 +1,31 @@
/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Kangho Kim <kh5325.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
package org.tizen.common.util;
+import static org.tizen.common.util.IOUtil.tryClose;
+
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
@@ -36,49 +38,174 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
-import java.net.URI;
-
-import org.eclipse.core.filesystem.EFS;
-import org.eclipse.core.filesystem.IFileSystem;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.tizen.common.util.log.Logger;
/**
* @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
*/
public class FileUtil {
- public static final String UTF_8 = "UTF-8"; //$NON-NLS-1$
-
private static final int BUFFER_SIZE = 8192;
/**
+ * Create directory.
+ * @param dir
+ * @return If directory couldn't be created, return false. Otherwise, return true.
+ */
+ public static boolean createDirectory(File dir) {
+ return dir.mkdirs();
+ }
+
+ /**
+ * Create directory.
+ * @param fullPath
+ * @return If directory couldn't be created, return false. Otherwise, return true.
+ */
+ public static boolean createDirectory(String fullPath) {
+ return createDirectory(new File(fullPath));
+ }
+
+ /**
+ * Create directory.
+ * @param dirName
+ * @param destDir If destDir is not set(null), then use user's current directory.
+ * @return If directory couldn't be created, return false. Otherwise, return true.
+ */
+ public static boolean createDirectory(String dirName, String destDir) {
+ if (dirName == null)
+ throw new NullPointerException();
+
+ if (destDir == null)
+ destDir = System.getProperty("user.dir");
+
+ String fullPath = FilenameUtil.addTailingPath(destDir, dirName);
+
+ return createDirectory(new File(fullPath));
+ }
+
+ /**
+ * Create text file.
+ *
+ * @param file
+ * @param text Input file's context.
+ * @param encoding If encoding is not set(null), then use system's default encoding.
+ *
+ * @return If file create fail, return false. Otherwise, return true.
+ *
+ * @throws IOException If creating file's directory does not exist, it throws IOException
+ */
+ public static boolean createTextFile(File file, String text, String encoding) throws IOException {
+ if (!file.createNewFile())
+ return false;
+
+ return writeTextFile(file, text, encoding);
+ }
+
+ /**
+ * Create text file.
+ *
+ * @param fullPath
+ * @param text Input file's context.
+ * @param encoding If encoding is not set(null), then use system's default encoding.
+ *
+ * @return If file create fail, return false. Otherwise, return true.
+ *
+ * @throws IOException If creating file's directory does not exist, it throws IOException
+ */
+ public static boolean createTextFile(String fullPath, String text, String encoding) throws IOException {
+ return createTextFile(new File(fullPath), text, encoding);
+ }
+
+ /**
+ * Create text file.
+ *
+ * @param fileName
+ * @param text Input file's context.
+ * @param destDir If destDir is not set(null), then use user's current directory.
+ * @param encoding If encoding is not set(null), then use system's default encoding.
+ *
+ * @return If file create fail, return false. Otherwise, return true.
+ *
+ * @throws IOException If creating file's directory does not exist, it throws IOException
+ */
+ public static boolean createTextFile(String fileName, String text, String destDir, String encoding) throws IOException {
+ if (fileName == null)
+ throw new NullPointerException();
+
+ if (destDir == null)
+ destDir = System.getProperty("user.dir");
+
+ String fullPath = FilenameUtil.addTailingPath(destDir, fileName);
+
+ return createTextFile(fullPath, text, encoding);
+ }
+
+ /**
* write text into given file
+ *
+ * @param file
+ * @param text Input context
+ * @param encoding If encoding is not set(null), then use system's default encoding.
+ *
+ * @return If file write success, return true.
+ *
+ * @throws IOException If don't write file, it throws IOException
*/
- public static void writeTextFile(File file, String text, String encoding) throws IOException {
- BufferedWriter out = null;
-
+ public static boolean writeTextFile(File file, String text, String encoding) throws IOException {
if (encoding == null) { // if encoding is not set then use default encoding
encoding = System.getProperty("file.encoding");
}
-
+
+ File parent = file.getParentFile();
+ if (!parent.exists()) {
+ if (!parent.mkdirs()) {
+ throw new IOException("File write error. Cannot create directory - " + parent.getAbsolutePath());
+ }
+ }
+
+ BufferedWriter out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding), BUFFER_SIZE);
out.write(text.toCharArray(), 0, text.length());
out.flush();
+ } catch (IOException e) {
+ throw e;
} finally {
if (out != null) {
out.close();
}
}
+
+ return true;
}
/**
- * read text from given file
+ * Read text from given file.
+ *
+ * @param file
+ * @param encoding
+ *
+ * @return content from file
+ *
+ * @throws IOException
*/
public static String readTextFile(File file, String encoding) throws IOException {
+ return readTextStream(new FileInputStream(file), encoding);
+ }
+
+ /**
+ * Read text from given inputStream.
+ *
+ * @param input
+ * @param encoding
+ *
+ * @return content from input
+ *
+ * @throws IOException
+ *
+ */
+ public static String readTextStream(InputStream input, String encoding) throws IOException {
StringBuilder text = new StringBuilder();
- char[] buffer = new char[BUFFER_SIZE];
BufferedReader in = null;
if (encoding == null) { // if encoding is not set then use default encoding
@@ -86,15 +213,10 @@ public class FileUtil {
}
try {
- in = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding), BUFFER_SIZE);
- int nRead = 0;
- while ((nRead = in.read(buffer, 0, buffer.length)) > 0) {
- text.append(buffer, 0, nRead);
- }
+ in = new BufferedReader(new InputStreamReader(input, encoding), BUFFER_SIZE);
+ IOUtil.redirect( in, text );
} finally {
- if (in != null) {
- in.close();
- }
+ IOUtil.tryClose( in );
}
return text.toString();
@@ -126,7 +248,7 @@ public class FileUtil {
}
int k = fullName.lastIndexOf(".");
-
+
return (k != -1) ? fullName.substring(0, k) : fullName;
}
@@ -157,21 +279,6 @@ public class FileUtil {
}
/**
- * copy file or directory using Eclipse File System
- *
- * @param source The source URI of the copy.
- * @param destination The destination URI of the copy.
- * @param options bit-wise or of option flag constants ({@link EFS#OVERWRITE} or {@link EFS#SHALLOW}).
- * @param monitor a progress monitor, or <code>null</code> if progress reporting and cancellation are not desired
- *
- * @author Jihoon Song {@literal <jihoon80.song@samsung.com>} (S-Core)
- */
- public static void copyUsingEFS(URI source, URI destination, int options, IProgressMonitor monitor) throws CoreException {
- IFileSystem fileSystem = EFS.getLocalFileSystem();
- fileSystem.getStore(source).copy(fileSystem.getStore(destination), options, monitor);
- }
-
- /**
* redirect input stream to output stream
*/
public static void redirectStream(InputStream is, OutputStream os) throws IOException {
@@ -218,7 +325,8 @@ public class FileUtil {
}
// makes sure it is not the same file
- if (fromFile.getCanonicalPath().equals(toFile.getCanonicalPath())) {
+ if ( FilenameUtil.equals( fromFile, toFile ) )
+ {
throw new IOException("Unable to write file " + fromFile + " on itself.");
}
@@ -229,14 +337,80 @@ public class FileUtil {
in = new BufferedInputStream(new FileInputStream(fromFile), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(to, append), BUFFER_SIZE);
- byte[] bytes = new byte[BUFFER_SIZE];
- int nRead = 0;
- while ((nRead = in.read(bytes, 0, bytes.length)) > 0) {
- out.write(bytes, 0, nRead);
- }
+ IOUtil.redirect( in, out );
} finally {
- if (in != null) in.close();
- if (out != null) out.close();
+ tryClose( in, out );
}
}
+
+ /**
+ * Copy all the files in the source directory to the destination directory.
+ * If destination directory does not exist, it is created.
+ * If destination file already exists , it tries to overwrite it.
+ *
+ * @param from source directory path
+ * @param to destination directory path
+ * @throws IOException
+ */
+ public static void copyRecursively(String from, String to) throws IOException {
+ File fromDir = new File(from);
+ File toDir = new File(to);
+ if (fromDir.exists() == false) {
+ Logger.error("Directory " + fromDir.getCanonicalPath() + " does not exist.");
+ return;
+ }
+ checkDirectory(fromDir, toDir);
+ copyRecursivelyWithoutDirChecking(fromDir, toDir);
+ }
+
+ private static void checkDirectory(File fromDir, File toDir) throws IOException {
+ if (toDir.exists() == false) {
+ toDir.mkdirs();
+ } else if(toDir.isFile() == true) {
+ throw new IOException("destination directory " + toDir.toString() + " is a file.");
+ }
+
+ if (fromDir.exists() == false) {
+ throw new IOException("source directory " + fromDir.toString() + " does not exist.");
+ }
+
+ if (fromDir.isFile() == true) {
+ throw new IOException("source directory " + fromDir.toString() + " is a file.");
+ }
+ }
+
+ private static void copyRecursivelyWithoutDirChecking(File fromDir, File toDir) throws IOException {
+ for(File fromFile: fromDir.listFiles()) {
+ String newDestPath = toDir.getCanonicalPath();
+ if(newDestPath.endsWith(File.separator)) {
+ newDestPath = newDestPath + fromFile.getName();
+ } else {
+ newDestPath = newDestPath + File.separator + fromFile.getName();
+ }
+
+ File toFile = new File(newDestPath);
+ if(fromFile.isDirectory()) {
+ copyRecursivelyWithoutDirChecking(fromFile, toFile);
+ } else if(fromFile.isFile()){
+ copyTo(fromFile.getCanonicalPath(), newDestPath);
+ }
+ }
+ }
+
+ /**
+ * Compares the two files "file1" and "file2".
+ */
+ public static boolean equals(File file1, File file2) throws IOException {
+ if ( file1 == null || file2 == null) {
+ return false;
+ }
+ String strFile1 = file1.getCanonicalPath();
+ String strFile2 = file2.getCanonicalPath();
+
+ if ( strFile1 == null || strFile2 == null ) {
+ return false;
+ }
+
+ return strFile1.equals(strFile2);
+ }
}
diff --git a/org.tizen.common/src/org/tizen/common/util/FilenameUtil.java b/org.tizen.common/src/org/tizen/common/util/FilenameUtil.java
new file mode 100755
index 000000000..ef4d64843
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/FilenameUtil.java
@@ -0,0 +1,422 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.tizen.common.util.ArrayUtil.size;
+import static org.tizen.common.util.StringUtil.trimLeadingCharacter;
+import static org.tizen.common.util.StringUtil.trimTrailingCharacter;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.regex.Pattern;
+
+/**
+ * FilenameUtil.
+ *
+ * Helper related to file name
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class FilenameUtil
+{
+ public static final char SEPARATOR_DIRECTORY = '/';
+ public static final int IS_VALID_NAME = 0;
+ public static final int HAS_INVALID_CHARACTER = 1;
+ public static final int HAS_NO_NAME = 2;
+ public static final int IS_NULL = 3;
+
+ /**
+ * Separate path to directory name fragements
+ *
+ * @param path file path
+ *
+ * @return canonical path's fragements
+ */
+ public static
+ String[]
+ getCanonicalFragments( final String path )
+ {
+ final String safe = path.replace( File.separatorChar, SEPARATOR_DIRECTORY);
+ final ArrayList<String> ret = new ArrayList<String>();
+ for ( final String fragment : safe.split( "" + SEPARATOR_DIRECTORY ) )
+ {
+ if ( StringUtil.isEmpty( fragment ) )
+ {
+ continue;
+ }
+
+ ret.add( fragment );
+ }
+ return ret.toArray( new String[0] );
+ }
+
+ public static
+ String
+ getTailingPath(
+ final String path,
+ final int start
+ )
+ {
+ final String[] fragments = getCanonicalFragments( path );
+
+ final StringBuilder buffer = new StringBuilder();
+
+ for ( int i = Math.max( 0, size( fragments ) - start ), n = size( fragments ) ; i < n ; ++i )
+ {
+ buffer.append( fragments[i] );
+ if ( i < size( fragments ) - 1 )
+ {
+ buffer.append( SEPARATOR_DIRECTORY );
+ }
+ }
+
+ return buffer.toString();
+ }
+
+ public static
+ String
+ removeTailingPath(
+ final String path,
+ final int numberOfPath
+ )
+ {
+ final String[] fragments = getCanonicalFragments( path );
+
+ final StringBuilder buffer = new StringBuilder();
+
+ for ( int i = 0, n = Math.max( 0, size( fragments ) - numberOfPath ) ; i < n ; ++i )
+ {
+ buffer.append( SEPARATOR_DIRECTORY );
+ buffer.append( fragments[i] );
+ }
+
+ return buffer.toString();
+ }
+
+ public static
+ String
+ addTailingPath(
+ final String path,
+ final String pathToAdd
+ )
+ {
+ // TODO Verify canonical form
+ return trimTrailingCharacter( path, SEPARATOR_DIRECTORY ) + SEPARATOR_DIRECTORY + trimLeadingCharacter( pathToAdd, SEPARATOR_DIRECTORY );
+ }
+
+ public static
+ boolean
+ isAncestor( final String root, final String filePath )
+ {
+ final String[] rootFragments = FilenameUtil.getCanonicalFragments( root );
+ final String[] fileFragments = FilenameUtil.getCanonicalFragments( filePath );
+
+ if ( fileFragments.length < rootFragments.length )
+ {
+ return false;
+ }
+
+ for ( int i = 0, n = rootFragments.length ; i < n ; ++i )
+ {
+ if ( !ObjectUtil.equals( rootFragments[i], fileFragments[i] ) )
+ {
+ return false;
+ }
+ }
+
+
+ return true;
+ }
+
+ public static
+ String
+ getRelativePath(
+ final String root,
+ final String filePath
+ )
+ {
+ final String[] rootFragments = FilenameUtil.getCanonicalFragments( root );
+ final String[] fileFragments = FilenameUtil.getCanonicalFragments( filePath );
+
+ Assert.isTrue(
+ rootFragments.length < fileFragments.length,
+ "root must be ancestor[" + root + "] of path[" + filePath + "]"
+ );
+
+ for ( int i = 0, n = rootFragments.length ; i < n ; ++i )
+ {
+ Assert.isTrue( ObjectUtil.equals( rootFragments[i], fileFragments[i] ) );
+ }
+
+
+
+ final StringBuilder buffer = new StringBuilder();
+
+ for ( int i = rootFragments.length, n = fileFragments.length ; i < n ; ++i )
+ {
+ if ( rootFragments.length < i )
+ {
+ buffer.append( SEPARATOR_DIRECTORY );
+ }
+ buffer.append( fileFragments[i] );
+ }
+
+ return buffer.toString();
+ }
+
+
+ /**
+ * Create canonical form for file path
+ *
+ * @param file {@link File} with file path
+ *
+ * @return canonical path
+ *
+ * @throws IOException If file's path is illegal
+ */
+ public static
+ String
+ getCanonicalPath(
+ final File file
+ )
+ throws IOException
+ {
+ final String osCanonicalPath = file.getCanonicalPath();
+
+ return getCanonicalForm( osCanonicalPath );
+
+ }
+
+ /**
+ * Convert path to canonical form
+ *
+ * @param path file path
+ *
+ * @return canonical path
+ */
+ public static
+ String
+ getCanonicalForm(
+ final String path
+ )
+ {
+ if ( File.separatorChar == SEPARATOR_DIRECTORY )
+ {
+ return path;
+ }
+
+ return path.replace( File.separatorChar, SEPARATOR_DIRECTORY );
+ }
+
+ public static String getFilename( final String path )
+ {
+ return getTailingPath( path, 1 );
+ }
+
+ /**
+ * Returns an escaped name of the file name for linux.
+ *
+ * \ " $ => \\ \" \$
+ *
+ * @param fileName
+ */
+ public static String getEscapedName(String fileName)
+ {
+ Pattern sEscapePattern = Pattern.compile("([\\\\\"$])");
+ return sEscapePattern.matcher(fileName).replaceAll("\\\\$1");
+ }
+
+ /**
+ * Return validation check of filename
+ *
+ * Windows does not allow \ / : * ? " <> | for file name
+ *
+ * Linux does not allow / for file name
+ *
+ * @param fileName file name to check
+ *
+ * @param os os type from OSChecker
+ *
+ * @return validation check result
+ */
+ public static int isVaildName(String fileName, int os)
+ {
+ int result = IS_VALID_NAME;
+ if(fileName == null)
+ {
+ result = IS_NULL;
+ }
+
+ if(fileName.length() == 0)
+ {
+ result = HAS_NO_NAME;
+ }
+ else
+ {
+ Pattern invalidPattern;
+
+ switch(os)
+ {
+ case OSChecker.WINDOWS:
+ invalidPattern = Pattern.compile("([\\\\/:*?\"<>|])");
+ break;
+ case OSChecker.LINUX:
+ default:
+ invalidPattern = Pattern.compile("([/])");
+ }
+
+ if(invalidPattern.matcher(fileName).find())
+ {
+ result = HAS_INVALID_CHARACTER;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Return validation check of filename for host os
+ *
+ * @param fileName file name to check
+ *
+ * @return validation check result
+ */
+ public static boolean isVaildName(String fileName)
+ {
+ return isVaildName(fileName, OSChecker.getOSID()) == IS_VALID_NAME ? true : false;
+ }
+
+ /**
+ * Return invalid filename characters
+ *
+ * @param os os type from OSChecker
+ *
+ * @return validation check result
+ */
+ public static String getInvalidCharacters(int os)
+ {
+ switch(os)
+ {
+ case OSChecker.WINDOWS:
+ return "\\\\/:*?\"<>|";
+ case OSChecker.LINUX:
+ return "/";
+ default:
+ return "/";
+ }
+ }
+
+ /**
+ * Return invalid filename characters for host os
+ *
+ * @return validation check result
+ */
+ public static String getInvalidCharacters()
+ {
+ return getInvalidCharacters(OSChecker.getOSID());
+ }
+
+ public static String addDoubleQuote(String str)
+ {
+ return "\""+ str + "\"";
+ }
+
+ /**
+ * Extract file name without extension from full name
+ *
+ * @param nameWithExt file name with extension
+ *
+ * @return file name
+ */
+ public static String getName( final String nameWithExt )
+ {
+ if ( null == nameWithExt )
+ {
+ throw new NullPointerException();
+ }
+
+ final int index = nameWithExt.lastIndexOf( '.' );
+
+ if ( index < 0 )
+ {
+ return nameWithExt;
+ }
+
+ return nameWithExt.substring( 0, index );
+ }
+
+ /**
+ * Extract file extension from full name
+ *
+ * @param nameWithExt file name with extension
+ *
+ * @return file extension
+ */
+ public static String getExtension( final String nameWithExt )
+ {
+ if ( null == nameWithExt )
+ {
+ throw new NullPointerException();
+ }
+
+ final int index = nameWithExt.lastIndexOf( '.' );
+
+ if ( index < 0 )
+ {
+ return "";
+ }
+
+ return nameWithExt.substring( index + 1 );
+ }
+
+ /**
+ * Compare two file path with canonical
+ *
+ * @param file1 file1 to compare
+ * @param file2 file2 to compare
+ *
+ * @return <code>true</code> if <code>file1</code> and <code>file2</code> have equal path
+ */
+ public static boolean equals( final File file1, final File file2 )
+ {
+ try
+ {
+ return ObjectUtil.equals(
+ getCanonicalPath( file1 ),
+ getCanonicalPath( file2 )
+ );
+ } catch ( final IOException e )
+ {
+ throw new IllegalArgumentException();
+ }
+ }
+
+
+ public static boolean equals( final String path1, final String path2 )
+ {
+ return ObjectUtil.equals( path1, path2 );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/FilterIterator.java b/org.tizen.common/src/org/tizen/common/util/FilterIterator.java
new file mode 100644
index 000000000..100223520
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/FilterIterator.java
@@ -0,0 +1,158 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * FilterIterator.
+ *
+ * {@link Iterator} using filter method
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @param <E>
+ */
+public class
+FilterIterator<E>
+implements Iterator<E>
+{
+ /**
+ * Unfiltered iterator
+ */
+ protected final Iterator<? extends E> impl;
+
+ /**
+ * Acceptable element
+ */
+ protected E acceptableElement;
+
+ /**
+ * Constructor with array instance of type E
+ *
+ * @param array array to iterate
+ */
+ public
+ FilterIterator(
+ final E[] array
+ )
+ {
+ this( Arrays.asList( array ) );
+ }
+
+ /**
+ * Constructor with collection containing E object
+ *
+ * @param collection collection to iterate
+ */
+ public
+ FilterIterator(
+ final Collection<? extends E> collection
+ )
+ {
+ this.impl = ( null == collection )?null:collection.iterator();
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#hasNext()
+ */
+ @Override
+ public
+ boolean
+ hasNext()
+ {
+ if ( null == this.impl )
+ {
+ return false;
+ }
+
+ while ( this.impl.hasNext() )
+ {
+ final E element = this.impl.next();
+ if ( isAcceptable( element ) )
+ {
+ this.acceptableElement = element;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#next()
+ */
+ @Override
+ public
+ E
+ next()
+ {
+ if ( null == this.impl )
+ {
+ throw new NoSuchElementException();
+ }
+
+ return this.acceptableElement;
+ }
+
+ /* (non-Javadoc)
+ * @see java.util.Iterator#remove()
+ */
+ @Override
+ public
+ void
+ remove()
+ {
+ if ( null == this.impl )
+ {
+ throw new NoSuchElementException();
+ }
+ this.impl.remove();
+ }
+
+ /**
+ * Determine <code>element</code> is acceptable( not filtering )
+ *
+ * @param element object to check
+ *
+ * @return boolean value if <code>element is acceptable
+ */
+ protected
+ boolean
+ isAcceptable(
+ final E element
+ )
+ {
+ if ( null == element )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/FreeMarkerUtil.java b/org.tizen.common/src/org/tizen/common/util/FreeMarkerUtil.java
new file mode 100644
index 000000000..b43d60f9a
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/FreeMarkerUtil.java
@@ -0,0 +1,180 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Jihoon Song <jihoon80.song@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Locale;
+import java.util.Map;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+import freemarker.template.Configuration;
+import freemarker.template.DefaultObjectWrapper;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+
+/**
+ * FreeMarkerUtil.
+ *
+ * Helper related to FreeMarker
+ *
+ * @author Jihoon Song{@literal <jihoon80.song@samsung.com>} (S-Core)
+ */
+public class FreeMarkerUtil {
+
+ private final static String DEFAULT_ENCODING = "8859_1";
+
+ // Constructor
+ private FreeMarkerUtil() {}
+
+ /**
+ * Get default initialized template configuration.
+ *
+ * @return Configuration
+ */
+ public static Configuration getDefaultConfiguration() {
+ // initialize FreeMarker engine
+ Configuration cfg = new Configuration();
+ cfg.setEncoding(Locale.getDefault(), DEFAULT_ENCODING); //$NON-NLS-1$
+ cfg.setObjectWrapper(new DefaultObjectWrapper());
+
+ return cfg;
+ }
+
+ /**
+ * Get initialized template configuration.
+ *
+ * @param activator be used for Plug-in based relative path. If this value is null, throws NullPointerException.
+ * @param relativeParentPath relative template's parent path in Plug-in Bundle.
+ * @return Configuration
+ * @throws URISyntaxException
+ * @throws IOException
+ */
+ public static Configuration getConfiguration(AbstractUIPlugin activator, String relativeParentPath)
+ throws URISyntaxException, IOException {
+ Assert.notNull(activator);
+ Assert.notNull(relativeParentPath);
+
+ Configuration cfg = getDefaultConfiguration();
+
+ // set template location in plug-in
+ URL templateFolderURL = activator.getBundle().getEntry(relativeParentPath);
+ if (templateFolderURL == null) {
+ throw new FileNotFoundException();
+ }
+
+ URI templateFolderURI = FileLocator.toFileURL(templateFolderURL).toURI();
+ File templateFolder = new File(templateFolderURI);
+
+ cfg.setDirectoryForTemplateLoading(templateFolder);
+
+ return cfg;
+ }
+
+ /**
+ * Generate document using freemarker template.
+ *
+ * @param root template data model
+ * @param cfg template configuration instance
+ * @param templateFile template file
+ * @param destination output file name
+ * @throws IOException
+ * @throws TemplateException
+ */
+ public static void generateDocument(Map<String, Object> root, Configuration cfg, String templateFile, String destination)
+ throws IOException, TemplateException {
+ generateDocument(root, cfg, templateFile, new File( destination ));
+ }
+
+ /**
+ * Generate document using freemarker template.
+ *
+ * @param root template data model
+ * @param cfg template configuration instance
+ * @param templateFile template file
+ * @param destinationFile will be used for internal stream like FileOutputStream.
+ * @throws IOException
+ * @throws TemplateException
+ */
+ public static void generateDocument(Map<String, Object> root, Configuration cfg, String templateFile, File destinationFile)
+ throws IOException, TemplateException {
+ generateDocument(root, cfg, templateFile, new FileOutputStream( destinationFile ));
+ }
+
+ /**
+ * Generate document using freemarker template.
+ *
+ * @param root template data model
+ * @param cfg template configuration instance
+ * @param templateFile template file
+ * @param outputStream will be used for internal writer like BufferedWriter and OutputStreamWriter.
+ * @throws IOException
+ * @throws TemplateException
+ */
+ public static void generateDocument(Map<String, Object> root, Configuration cfg, String templateFile, OutputStream outputStream)
+ throws IOException, TemplateException {
+ generateDocument(root, cfg, templateFile, new BufferedWriter( new OutputStreamWriter( outputStream ) ));
+ }
+
+ /**
+ * Generate document using freemarker template.
+ *
+ * @param root template data model
+ * @param cfg template configuration instance
+ * @param templateFile template file
+ * @param writer output writer
+ * @throws IOException
+ * @throws TemplateException
+ */
+ public static void generateDocument(Map<String, Object> root, Configuration cfg, String templateFile, Writer writer)
+ throws IOException, TemplateException {
+ Assert.notNull(root);
+ Assert.notNull(cfg);
+ Assert.notNull(templateFile);
+ Assert.notNull(writer);
+
+ Template template = cfg.getTemplate(templateFile);
+
+ // generate document
+ try {
+ template.process(root, writer);
+ IOUtil.tryFlush(writer);
+ } finally {
+ IOUtil.tryClose(writer);
+ }
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/HelpBrowser.java b/org.tizen.common/src/org/tizen/common/util/HelpBrowser.java
new file mode 100644
index 000000000..58db9e3a8
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/HelpBrowser.java
@@ -0,0 +1,120 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Ho Namkoong <ho.namkoong@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.LocationEvent;
+import org.eclipse.swt.browser.LocationListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.help.IWorkbenchHelpSystem;
+import org.tizen.common.CommonPlugin;
+
+public class HelpBrowser {
+
+ private static final String HELP_PAGE_PREFIX = "help:/";
+ private static final String BACK_ICON = "icons/back.gif";
+ private static final String FORWARD_ICON = "icons/forward.gif";
+
+ private Browser browser;
+
+ public Browser getBrowser() {
+ return browser;
+ }
+
+ public HelpBrowser(Composite parent, int style) {
+ this(parent, style, false);
+ }
+
+ public HelpBrowser(Composite parent, int style, boolean hasToolbar) {
+ if(hasToolbar == true) {
+ generateToolBar(parent);
+ }
+ this.browser = new Browser(parent, style);
+ GridData gd = new GridData(GridData.FILL_BOTH);
+ this.browser.setLayoutData(gd);
+ enableHelpPage();
+ }
+
+ private void generateToolBar(Composite parent) {
+ ToolBar toolbar = new ToolBar(parent, SWT.None);
+
+ ToolItem backButton = new ToolItem(toolbar, SWT.PUSH);
+ Image backIcon = ImageUtil.getImage(CommonPlugin.PLUGIN_ID, BACK_ICON);
+ backButton.setImage(backIcon);
+
+ ToolItem forwardButton = new ToolItem(toolbar, SWT.PUSH);
+ Image forwardIcon = ImageUtil.getImage(CommonPlugin.PLUGIN_ID, FORWARD_ICON);
+ forwardButton.setImage(forwardIcon);
+
+ forwardButton.addSelectionListener(new SelectionListener() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ browser.forward();
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ backButton.addSelectionListener(new SelectionListener() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ browser.back();
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ }
+
+ private void enableHelpPage() {
+ this.getBrowser().addLocationListener(new LocationListener() {
+ @Override
+ public void changing(LocationEvent event) {
+ String url = event.location;
+ if(url.startsWith(HELP_PAGE_PREFIX)) {
+ Browser browser = ((Browser)event.widget);
+ String tempUrl = url.substring(HELP_PAGE_PREFIX.length(), url.length());
+ IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
+ browser.setUrl(helpSystem.resolve(tempUrl, false).toString());
+ }
+ }
+ @Override
+ public void changed(LocationEvent event) {
+ }
+ });
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/HostUtil.java b/org.tizen.common/src/org/tizen/common/util/HostUtil.java
index a2e1b6871..012a60c49 100644..100755
--- a/org.tizen.common/src/org/tizen/common/util/HostUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/HostUtil.java
@@ -24,356 +24,311 @@
*/
package org.tizen.common.util;
+import static org.tizen.common.util.IOUtil.tryClose;
+
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
-import java.io.IOException;
import java.io.InputStreamReader;
-import java.net.InetAddress;
import java.nio.channels.FileChannel;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.tizen.common.console.ConsoleManager;
+import org.tizen.common.ui.view.console.ConsoleManager;
public abstract class HostUtil{
-
-// public static final String USER = System.getenv("USER");
-// public static final String USER_HOME = System.getenv("HOME");
- public static final String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$
- public static final String FILE_SEPARATOR = System.getProperty("file.separator"); //$NON-NLS-1$
-
- private static final String PROC_PATH = "/proc"; //$NON-NLS-1$
- private static final String SHELL_COMMAND_LINUX= "/bin/sh"; //$NON-NLS-1$
- private static final String SHELL_COMMAND_WINDOW= "cmd"; //$NON-NLS-1$
-
- public static boolean hasProcFile(String pid) {
- if(pid==null||pid.equals("")) //$NON-NLS-1$
- return false;
+
+ public static final String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$
+ public static final String FILE_SEPARATOR = System.getProperty("file.separator"); //$NON-NLS-1$
+
+ private static final String SHELL_COMMAND_LINUX= "/bin/sh"; //$NON-NLS-1$
+ private static final String SHELL_COMMAND_WINDOW= "cmd"; //$NON-NLS-1$
+
+ public static String getContents(String filePath) {
+ BufferedReader input = null;
+ StringBuilder contents = new StringBuilder();
+ String line = null;
+
+ try {
+ input = new BufferedReader(new FileReader(filePath));
+ while((line=input.readLine())!=null){
+ contents.append(line);
+ contents.append(LINE_SEPARATOR);
+ }
+ }catch(Exception e) {
+// e.printStackTrace();
+ return null;
+ }finally{
+ tryClose( input );
+ }
+
+ return contents.toString().trim();
+ }
- String pidFile = PROC_PATH+Path.SEPARATOR+pid;
- return exists(pidFile);
- }
- public static boolean isMenuReady(String pid) {
- if(pid==null||pid.equals("")) //$NON-NLS-1$
- return false;
+ public static boolean exists(String path) {
+ if( path == null || path.equals("") ) //$NON-NLS-1$
+ return false;
- String pidFile = PROC_PATH+Path.SEPARATOR+pid;
- return exists(pidFile);
- }
+ File file = new File( path );
-
- public static String getContents(String filePath) {
- BufferedReader input = null;
- StringBuilder contents = new StringBuilder();
- String line = null;
-
- try {
- input = new BufferedReader(new FileReader(filePath));
- while((line=input.readLine())!=null){
- contents.append(line);
- contents.append(LINE_SEPARATOR);
- }
- }catch(Exception e) {
-// e.printStackTrace();
- return null;
- }finally{
- if(input!=null)
- try {
- input.close();
- } catch (IOException e) {
- }
- }
-
- return contents.toString().trim();
- }
-
- public static boolean isReachable(String ip) {
- try {
- return InetAddress.getByName(ip).isReachable(100);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
+ return file.exists();
+ }
- public static boolean exists(String path) {
- if(path==null||path.equals("")) //$NON-NLS-1$
- return false;
-
- IPath ipath = new Path(path);
- File file = ipath.toFile();
-
- if(file!=null&&file.exists())
- return true;
- else
- return false;
- }
-
- public static boolean execute(String command){
- Process proc = null;
- Runtime runtime = Runtime.getRuntime();
-
- String[] fullCommand = getCommand(command);
-
- int i = 0;
- try {
- proc= runtime.exec(fullCommand);
- i = proc.waitFor();
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- } finally{
- System.out.println("HostUtil execute - exit value : " + i);
- if(proc!=null)
- proc.destroy();
- }
-
- return i==0;
- }
-
- public static boolean batchExecute(String command)
- {
- String[] fullCommand = getCommand(command);
+ public static boolean execute(String command){
+
+ if(command == null) {
+ return false;
+ }
+ Process proc = null;
+ Runtime runtime = Runtime.getRuntime();
+
+ String[] fullCommand = getCommand(command);
+
+ int i = 0;
+ try {
+ proc= runtime.exec(fullCommand);
+ i = proc.waitFor();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ } finally{
+ System.out.println("HostUtil execute - exit value : " + i);
+ if(proc!=null)
+ proc.destroy();
+ }
+
+ return i==0;
+ }
+
+ public static boolean batchExecute(String command)
+ {
+ if(command == null) {
+ return false;
+ }
+ String[] fullCommand = getCommand(command);
- Runtime run = Runtime.getRuntime();
- Process p = null;
-
- try{
- p = run.exec(fullCommand);
- StreamGobbler gb1 = new StreamGobbler(p.getInputStream());
- StreamGobbler gb2 = new StreamGobbler(p.getErrorStream());
- gb1.start();
- gb2.start();
- }catch(Exception e){
- e.printStackTrace();
- return false;
- }finally{
- }
- return true;
- }
+ Runtime run = Runtime.getRuntime();
+ Process p = null;
+
+ int i = 0;
+ try{
+ p = run.exec(fullCommand);
+ i = p.waitFor();
+ StreamGobbler gb1 = new StreamGobbler(p.getInputStream());
+ StreamGobbler gb2 = new StreamGobbler(p.getErrorStream());
+ gb1.start();
+ gb2.start();
+ }catch(Exception e){
+ e.printStackTrace();
+ return false;
+ }
+ return i == 0;
+ }
- /**
- * Don't need for emultor install registration.
- * using java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)
- * @param command - array containing the command to call and its arguments.
- * @param envp - array of strings, each element of which has environment variable settings in format name=value.
- * @param dir - Emultor path.
- * @return success true, failed false.
- */
- public static boolean batchExecute(String command, String[] envp, File dir)
- {
- String[] fullCommand = getCommand(command);
+ /**
+ * Don't need for emultor install registration.
+ * using java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)
+ * @param command - array containing the command to call and its arguments.
+ * @param envp - array of strings, each element of which has environment variable settings in format name=value.
+ * @param dir - Emultor path.
+ * @return success true, failed false.
+ */
+ public static boolean batchExecute(String command, String[] envp, File dir)
+ {
+ String[] fullCommand = getCommand(command);
- Runtime run = Runtime.getRuntime();
- Process p = null;
+ Runtime run = Runtime.getRuntime();
+ Process p = null;
- StreamGobbler gb1 = null;
- StreamGobbler gb2 = null;
- try{
- p = run.exec(fullCommand, envp, dir);
- gb1 = new StreamGobbler(p.getInputStream());
- gb2 = new StreamGobbler(p.getErrorStream());
- gb1.start();
- gb2.start();
- }catch(Exception e){
- e.printStackTrace();
- return false;
- }finally{
- System.out.println(gb1.getResult());
- System.out.println(gb2.getResult());
- }
- return true;
- }
+ StreamGobbler gb1 = null;
+ StreamGobbler gb2 = null;
+ try{
+ p = run.exec(fullCommand, envp, dir);
+ gb1 = new StreamGobbler(p.getInputStream());
+ gb2 = new StreamGobbler(p.getErrorStream());
+ gb1.start();
+ gb2.start();
+ }catch(Exception e){
+ e.printStackTrace();
+ return false;
+ }finally{
+ System.out.println(gb1.getResult());
+ System.out.println(gb2.getResult());
+ }
+ return true;
+ }
- public static String returnExecute(String command, String workingDir) {
- BufferedReader input = null;
- StringBuilder contents = new StringBuilder();
- String line = null;
-
- Process proc = null;
-
- String[] fullCommand = getCommand(command);
-
- try {
- ProcessBuilder pb = new ProcessBuilder();
- pb.command(fullCommand);
- if(workingDir != null) {
- pb.directory(new File(workingDir));
- }
- proc = pb.start();
- input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
- while((line=input.readLine())!=null){
- contents.append(line);
- contents.append(LINE_SEPARATOR);
- }
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- } finally{
- if(proc!=null)
- proc.destroy();
- if(input!=null)
- try {
- input.close();
- } catch (IOException e) {
- }
- }
-
- return contents.toString().trim();
-
- }
-
- /**
- * Show output messages while executes the command on console view
- * @param command - Command to execute.
- * @param viewName - View name showing messages while executes the command.
- */
- public static void executeWithConsole(String command, String viewName) throws Exception {
- BufferedReader input = null;
+ public static String returnExecute(String command, String workingDir) {
+
+ if(command == null) {
+ return null;
+ }
+ BufferedReader input = null;
+ StringBuilder contents = new StringBuilder();
+ String line = null;
+
+ Process proc = null;
+
+ String[] fullCommand = getCommand(command);
+
+ try {
+ ProcessBuilder pb = new ProcessBuilder();
+ pb.command(fullCommand);
+ if(workingDir != null) {
+ pb.directory(new File(workingDir));
+ }
+ proc = pb.start();
+ input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+ while((line=input.readLine())!=null){
+ contents.append(line);
+ contents.append(LINE_SEPARATOR);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ } finally{
+ tryClose( input );
+ if(proc!=null)
+ {
+ proc.destroy();
+ }
+ }
+
+ return contents.toString().trim();
+
+ }
+
+ /**
+ * Show output messages while executes the command on console view
+ * @param command - Command to execute.
+ * @param viewName - View name showing messages while executes the command.
+ */
+ public static void executeWithConsole(String command, String viewName) throws Exception {
+ BufferedReader input = null;
- String line = null;
-
- Process proc = null;
-
- String[] fullCommand = getCommand(command);
-
- ConsoleManager cm = new ConsoleManager( viewName, true );
- cm.clear();
-
- try {
- ProcessBuilder pb = new ProcessBuilder();
- pb.redirectErrorStream(true);
- pb.command(fullCommand);
- proc = pb.start();
- input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
- while((line=input.readLine())!=null){
- cm.println(line);
- }
- proc.waitFor();
- // abnormal termination
- if (proc.exitValue() != 0)
- throw new Exception("Failed to execute command: " + command);
- } finally {
- if(proc!=null)
- proc.destroy();
- if(input!=null)
- try {
- input.close();
- } catch (IOException e) {
- }
- }
- }
-
- public static String returnExecute(String command){
-
- return returnExecute(command, null);
- }
-
- public static String[] getCommand(String command){
-
- if(OSChecker.isWindows()){
- return new String[]{SHELL_COMMAND_WINDOW,"/c",command}; //$NON-NLS-1$
- }else
- {
- return new String[]{SHELL_COMMAND_LINUX,"-c",command}; //$NON-NLS-1$
- }
- }
-
-
- public static boolean createFile(String path, String contents) {
- BufferedWriter output = null;
- try {
- File file = new File(path);
-
- File folder = file.getParentFile();
- if(folder!=null)
- folder.mkdirs();
-
- file.createNewFile();
-
- output = new BufferedWriter(new FileWriter(file));
- output.write(contents);
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }finally{
- if(output!=null)
- try {
- output.close();
- } catch (IOException e) {
- }
- }
- }
-
- public static boolean removeFile(String path) {
- File file = new File(path);
- if (!file.exists())
- return false;
- return file.delete();
- }
-
- /**
- * @deprecated Use {@link FileUtil#copyTo(String, String)} instead.
- */
- @Deprecated
- public static boolean copyFile(String src, String des) throws Exception {
- boolean canExecute = false;
- File srcFile=new File(src);
- File desFile=null;
- FileInputStream fis=null;
- FileOutputStream fos=null;
- FileChannel fcin=null;
- FileChannel fcout=null;
-
- canExecute = srcFile.canExecute();
-
- desFile= new File(des);
- File paths = new File(desFile.getAbsolutePath().substring(0, desFile.getAbsolutePath().lastIndexOf("/"))); //$NON-NLS-1$
- if (!paths.exists()) {
- paths.mkdirs();
- }
-
- try {
- fis= new FileInputStream(srcFile);
- fos= new FileOutputStream(desFile);
- fcin= fis.getChannel();
- fcout= fos.getChannel();
-
- long size= fcin.size();
- fcin.transferTo(0, size, fcout);
- desFile.setExecutable(canExecute);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- throw e;
- } catch (IOException e) {
- e.printStackTrace();
- throw e;
- }finally{
- try {
- fcout.close();
- fcin.close();
- fos.close();
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- throw e;
- }
- }
+ String line = null;
+
+ Process proc = null;
+
+ String[] fullCommand = getCommand(command);
+
+ ConsoleManager cm = new ConsoleManager( viewName, true );
+ cm.clear();
+
+ try {
+ ProcessBuilder pb = new ProcessBuilder();
+ pb.redirectErrorStream(true);
+ pb.command(fullCommand);
+ proc = pb.start();
+ input = new BufferedReader(new InputStreamReader(proc.getInputStream()));
+ while((line=input.readLine())!=null){
+ cm.println(line);
+ }
+ proc.waitFor();
+ // abnormal termination
+ if (proc.exitValue() != 0)
+ throw new Exception("Failed to execute command: " + command);
+ } finally {
+ tryClose( input );
+ if(proc!=null)
+ {
+ proc.destroy();
+ }
+ }
+ }
+
+ public static String returnExecute(String command){
+
+ return returnExecute(command, null);
+ }
+
+ public static String[] getCommand(String command){
+
+ if(OSChecker.isWindows()){
+ return new String[]{SHELL_COMMAND_WINDOW,"/c",command}; //$NON-NLS-1$
+ }else
+ {
+ return new String[]{SHELL_COMMAND_LINUX,"-c",command}; //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @deprecated Use {@link FileUtil#createFile(File)},
+ * {@link FileUtil#createFile(String)},
+ * {@link FileUtil#createFile(String, String)}
+ * or
+ * {@link FileUtil#createTextFile(File, String, String)},
+ * {@link FileUtil#createTextFile(String, String, String)},
+ * {@link FileUtil#createTextFile(String, String, String, String)}
+ * and
+ * {@link FileUtil#createDirectory(File)},
+ * {@link FileUtil#createDirectory(String)},
+ * {@link FileUtil#createDirectory(String, String)}
+ * instead.
+ */
+ @Deprecated
+ public static boolean createFile(String path, String contents) {
+ BufferedWriter output = null;
+ try {
+ File file = new File(path);
+
+ File folder = file.getParentFile();
+ if(folder!=null)
+ folder.mkdirs();
+
+ file.createNewFile();
+
+ output = new BufferedWriter(new FileWriter(file));
+ output.write(contents);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }finally{
+ tryClose( output );
+ }
+ }
+
+
+ /**
+ * @deprecated Use {@link FileUtil#copyTo(String, String)} instead.
+ */
+ @Deprecated
+ public static boolean copyFile(String src, String des) throws Exception {
+ boolean canExecute = false;
+ File srcFile=new File(src);
+ File desFile=null;
+ FileInputStream fis=null;
+ FileOutputStream fos=null;
+ FileChannel fcin=null;
+ FileChannel fcout=null;
+
+ canExecute = srcFile.canExecute();
+
+ desFile= new File(des);
+ File paths = new File(desFile.getAbsolutePath().substring(0, desFile.getAbsolutePath().lastIndexOf("/"))); //$NON-NLS-1$
+ if (!paths.exists()) {
+ paths.mkdirs();
+ }
+
+ try {
+ fis= new FileInputStream(srcFile);
+ fos= new FileOutputStream(desFile);
+ fcin= fis.getChannel();
+ fcout= fos.getChannel();
+
+ long size= fcin.size();
+ fcin.transferTo(0, size, fcout);
+ desFile.setExecutable(canExecute);
+ }finally{
+ tryClose( fcout, fcin, fos, fis );
+ }
- return true;
- }
-
- public static boolean isLinux(){
- return Platform.getOS().equals(Platform.OS_LINUX);
- }
+ return true;
+ }
+
}
diff --git a/org.tizen.common/src/org/tizen/common/util/IOUtil.java b/org.tizen.common/src/org/tizen/common/util/IOUtil.java
index 0dce62006..9fbd2e06f 100644
--- a/org.tizen.common/src/org/tizen/common/util/IOUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/IOUtil.java
@@ -24,25 +24,361 @@
*/
package org.tizen.common.util;
+import java.io.ByteArrayOutputStream;
import java.io.Closeable;
+import java.io.Flushable;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* IOUtil
* @author Hyeongseok Heo {@literal<hyeongseok.heo@samsung.com>}
+ * BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
* @since Dec 9, 2011
*/
public class IOUtil {
- public static void close(Closeable closable) {
- if( null != closable) {
- try {
- closable.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ private static final int BUFFER_SIZE = 8192;
+
+ protected static final Logger logger = LoggerFactory.getLogger( IOUtil.class );
+
+ /**
+ * close closable objects.
+ *
+ * @param closeables object to be able to close
+ */
+ public static void tryClose( final Object... closeables )
+ {
+ if ( null == closeables )
+ {
+ return ;
+ }
+
+ for ( Object obj : closeables )
+ {
+ if ( null == obj )
+ {
+ continue;
+ }
+ try
+ {
+ if ( obj instanceof Closeable )
+ {
+ ((Closeable) obj).close();
+ }
+ else if ( obj instanceof Socket )
+ {
+ ((Socket) obj).close();
+ }
+ else if ( obj instanceof ServerSocket )
+ {
+ ((ServerSocket) obj).close();
+ }
+ }
+ catch ( final IOException e )
+ {
+ }
+ }
+ }
+
+ /**
+ * flush <code>Flushable</code>s
+ *
+ * @param flushables <code>Flushable</code>s to flush
+ */
+ public static void tryFlush( final Flushable... flushables )
+ {
+ if ( null == flushables )
+ {
+ return ;
+ }
+
+ for ( Flushable closeable : flushables )
+ {
+ if ( null == closeable )
+ {
+ continue;
+ }
+ try
+ {
+ closeable.flush();
+ }
+ catch ( final IOException e )
+ {
+ }
+ }
+
+ }
+
+ /**
+ * Redirect from <code>in</code> to <code>out</code>
+ *
+ * @param in {@link InputStream}
+ * @param out {@link OutputStream}
+ *
+ * @throws IOException occur exception when handling <code>in</code> or <code>out</code>
+ */
+ public static
+ void
+ redirect(
+ final InputStream in,
+ final OutputStream out
+ )
+ throws IOException
+ {
+ final byte[] buffer = new byte[BUFFER_SIZE];
+
+ int nRead = 0;
+ int totalBytes = 0;
+ while ( 0 < ( nRead = in.read( buffer ) ) )
+ {
+ out.write( buffer, 0, nRead );
+ totalBytes += nRead;
+ }
+
+ logger.trace( "{} byte(s) wrote", totalBytes );
+
+ tryFlush( out );
+ }
+
+ /**
+ * Redirect from <code>reader</code> to <code>writer</code>
+ *
+ * @param reader {@link Reader}
+ * @param writer {@link Writer}
+ *
+ * @throws IOException occur exception when handling <code>reader</code> or <code>writer</code>
+ */
+ public static
+ void
+ redirect(
+ final Reader reader,
+ final Writer writer
+ )
+ throws IOException
+ {
+ final char[] buffer = new char[BUFFER_SIZE];
+
+ int nRead = 0;
+ while ( 0 < ( nRead = reader.read( buffer ) ) )
+ {
+ writer.write( buffer, 0, nRead );
+ }
+ tryFlush( writer );
+ }
+
+ /**
+ * Redirect from <code>reader</code> to <code>writer</code>
+ *
+ * @param reader {@link Reader}
+ * @param writer {@link StringBuffer}
+ *
+ * @throws IOException occur exception when handling <code>reader</code> or <code>writer</code>
+ */
+ public static
+ void
+ redirect(
+ final Reader reader,
+ final StringBuffer writer
+ )
+ throws IOException
+ {
+ final char[] buffer = new char[BUFFER_SIZE];
+
+ int nRead = 0;
+ while ( 0 < ( nRead = reader.read( buffer ) ) )
+ {
+ writer.append( buffer, 0, nRead );
+ }
+ }
+
+ /**
+ * Redirect from <code>reader</code> to <code>writer</code>
+ *
+ * @param reader {@link Reader}
+ * @param writer {@link StringBuilder}
+ *
+ * @throws IOException occur exception when handling <code>reader</code> or <code>writer</code>
+ */
+ public static
+ void
+ redirect(
+ final Reader reader,
+ final StringBuilder writer
+ )
+ throws IOException
+ {
+ if ( null == reader )
+ {
+ return ;
+ }
+ final char[] buffer = new char[BUFFER_SIZE];
+
+ int nRead = 0;
+ while ( 0 < ( nRead = reader.read( buffer ) ) )
+ {
+ writer.append( buffer, 0, nRead );
+ }
+ }
+
+
+ /**
+ * Get and return byte array from {@link InputStream}
+ *
+ * @param in input stream to read byte array
+ *
+ * @return stored byte array
+ *
+ * @throws IOException If can't read byte from <code>in</code>
+ *
+ * @link {@link #getBytes(InputStream, boolean)}
+ */
+ public static
+ byte[] getBytes(
+ final InputStream in
+ )
+ throws IOException
+ {
+ return getBytes( in, false );
+ }
+
+ /**
+ * Get and return byte array from {@link InputStream}
+ *
+ * @param in input stream to read byte array
+ * @param bClose optional flag if close <code>in</code> after processing
+ *
+ * @return stored byte array
+ *
+ * @throws IOException If can't read byte from <code>in</code>
+ *
+ * @link {@link #redirect(InputStream, OutputStream)}
+ */
+ public static
+ byte[] getBytes(
+ final InputStream in,
+ final boolean bClose
+ ) throws IOException
+ {
+ final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+
+ try
+ {
+ redirect( in, byteOut );
+
+ if ( bClose )
+ {
+ tryClose( in );
}
+
+ return byteOut.toByteArray();
}
+ finally
+ {
+ tryClose( byteOut );
+ }
+
+ }
+
+ /**
+ * <p>
+ * Get and return string from {@link Reader}
+ *
+ * return empty string( "" ) if <code>reader</code> is <code>null</code>
+ * </p>
+ *
+ * @param reader reader to read string
+ * @return string to be accquired
+ *
+ * @throws IOException If can't read string from {@link Reader}
+ *
+ * @see #getString(Reader, boolean)
+ */
+ public static
+ String getString(
+ final Reader reader
+ )
+ throws IOException
+ {
+ return getString( reader, false );
+
}
-
+
+ /**
+ * <p>
+ * Get and return string from {@link Reader}
+ *
+ * Return empty string( "" ) if <code>reader</code> is <code>null</code>
+ * </p>
+ *
+ * @param reader reader to read string
+ * @param bClose optional flag if close <code>in</code> after processing
+ *
+ * @return string to be accquired
+ *
+ * @throws IOException If can't read string from {@link Reader}
+ *
+ * @see #redirect(Reader, StringBuilder)
+ */
+ public static
+ String
+ getString(
+ final Reader reader,
+ final boolean bClose
+ )
+ throws IOException
+ {
+ final StringBuilder writer = new StringBuilder();
+ try {
+ redirect( reader, writer );
+
+ if ( bClose )
+ {
+ tryClose( reader );
+ }
+
+ return writer.toString();
+ }
+ finally
+ {
+ tryClose( writer );
+ }
+
+ }
+
+ /**
+ * <p>
+ * Get and return string from {@link InputStream}
+ *
+ * Return empty string ( "" ) if <code>in</code> is <code>null</code>
+ *
+ * @param in {@link InputStream} to read
+ *
+ * @return string to be accquired
+ *
+ * @throws IOException If can't read anything from {@link InputStream}
+ *
+ * @see #getString(Reader)
+ */
+ public static
+ String
+ getString(
+ final InputStream in
+ )
+ throws IOException
+ {
+ return getString( new InputStreamReader( in ) );
+ }
+
+
}
diff --git a/org.tizen.common/src/org/tizen/common/util/ImageUtils.java b/org.tizen.common/src/org/tizen/common/util/ImageUtil.java
index c22fd7828..49d85e29f 100644
--- a/org.tizen.common/src/org/tizen/common/util/ImageUtils.java
+++ b/org.tizen.common/src/org/tizen/common/util/ImageUtil.java
@@ -31,19 +31,73 @@ import org.eclipse.core.runtime.Plugin;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
+import org.osgi.framework.Bundle;
+import org.tizen.common.SurrogateWithArgument;
-public class ImageUtils {
+public class ImageUtil {
+ public static class PlatformSurrogate {
+ public Bundle getBundle(String pluginID) {
+ return Platform.getBundle(pluginID);
+ }
+ }
+
+ public static class PluginSurrogate {
+ public Bundle getBundle(Plugin plugin) {
+ return plugin.getBundle();
+ }
+ }
+
+ public static final String[] supportedImageExtension = {
+ "*.gif;*.png;*.jpeg;*.jpg;*.tiff;*.tif;*.ico;*.bmp;*.rle", // all supported format in SWT //$NON-NLS-1$
+ "*.gif", // Graphics Interchange Format, including animated GIFs //$NON-NLS-1$
+ "*.png", // Portable Network Graphics //$NON-NLS-1$
+ "*.jpeg;*.jpg", // Joint Photographic Experts Group //$NON-NLS-1$
+ "*.tiff;*.tif", // Tagged Image File Format //$NON-NLS-1$
+ "*.ico", // Widows Icon //$NON-NLS-1$
+ "*.bmp", // Windows Bitmap //$NON-NLS-1$
+ "*.rle" // Windows Bitmap with run-length encoding //$NON-NLS-1$
+ };
+
+ /**
+ * load image descriptor from <code>bundle</code> with <code>filePath</code>
+ *
+ * @param bundle {@link Bundle}
+ * @param filePath image file path
+ *
+ * @return loaded {@link ImageDescriptor}
+ */
+ protected static
+ ImageDescriptor
+ getImageDescriptor(
+ final Bundle bundle,
+ final String filePath
+ )
+ {
+ final URL url = bundle.getEntry( filePath );
+ return ImageDescriptor.createFromURL( url );
+ }
+
+ protected static SurrogateWithArgument<Bundle, String> platformSurrogate = new SurrogateWithArgument<Bundle, String>() {
+ public Bundle getAdapter( final String pluginId )
+ {
+ return Platform.getBundle( pluginId );
+ }
+ };
+ protected static SurrogateWithArgument<Bundle, Plugin> pluginSurrogate = new SurrogateWithArgument<Bundle, Plugin>() {
+ public Bundle getAdapter(Plugin plugin) {
+ return plugin.getBundle();
+ }
+ };
+
// get ImageDescriptor from Plugin ID (ID -> ImageDescriptor)
public static ImageDescriptor getImageDescriptor(String pluginID, String filePath) {
- URL url = Platform.getBundle(pluginID).getEntry(filePath);
- return ImageDescriptor.createFromURL(url);
+ return getImageDescriptor( platformSurrogate.getAdapter(pluginID), filePath );
}
// get ImageDescriptor from Activator Plugin (Activator -> ImageDescriptor)
public static ImageDescriptor getImageDescriptor(Plugin plugin, String filePath) {
- URL url = plugin.getBundle().getEntry(filePath); // $NON-NLS-1$
- return ImageDescriptor.createFromURL(url);
+ return getImageDescriptor( pluginSurrogate.getAdapter(plugin), filePath );
}
// get Image from ImageDescriptor (ImageDescriptor -> Image)
@@ -79,4 +133,4 @@ public class ImageUtils {
ImageDescriptor descriptor = getImageDescriptor(pluginID, filePath);
return getImageData(descriptor);
}
-} \ No newline at end of file
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/IteratingAcceptor.java b/org.tizen.common/src/org/tizen/common/util/IteratingAcceptor.java
new file mode 100644
index 000000000..bb8c3d1a0
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/IteratingAcceptor.java
@@ -0,0 +1,49 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import java.util.Collection;
+
+/**
+ * IteratingAcceptor.
+ *
+ * Filter logic containing iterface for {@link Collection} or array
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @param <T> arguement type
+ */
+public interface IteratingAcceptor<T>
+{
+ /**
+ * Check that <code>arg</code> is filtered or passed
+ *
+ * @param arg collection element
+ *
+ * @return <code>true</code> if <code>arg</code> is element to pass
+ */
+ boolean accept( T arg );
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/IteratingAdapter.java b/org.tizen.common/src/org/tizen/common/util/IteratingAdapter.java
new file mode 100644
index 000000000..6c29b90fa
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/IteratingAdapter.java
@@ -0,0 +1,7 @@
+package org.tizen.common.util;
+
+import java.util.Iterator;
+
+public interface IteratingAdapter<T> {
+ public Iterator<T> adapt( T obj );
+}
diff --git a/org.tizen.common/src/org/tizen/common/model/ITreeModel.java b/org.tizen.common/src/org/tizen/common/util/IteratingRunner.java
index 50a7a1373..5136d99c4 100644
--- a/org.tizen.common/src/org/tizen/common/model/ITreeModel.java
+++ b/org.tizen.common/src/org/tizen/common/util/IteratingRunner.java
@@ -1,42 +1,47 @@
-/*
-* Common
-*
-* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
-*
-* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* Contributors:
-* - S-Core Co., Ltd
-*
-*/
-
-package org.tizen.common.model;
-
-import java.util.Collection;
-
-public interface ITreeModel
-{
- public void add(ITreeVO datas);
- public void add(Collection<ITreeVO> datas);
- public void remove(ITreeVO datas);
- public void remove(Collection<ITreeVO> datas);
- public ITreeVO[] getDatas();
- public void load(String fileName);
- public void save(String fileName);
- public void clear();
- public int size();
- public String getSourceName();
-}
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import java.util.Collection;
+
+/**
+ * IteratingRunner.
+ *
+ * Runner with argument for iteration of {@link Collection} or array
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @param <T> arguement type
+ */
+public interface IteratingRunner<T>
+{
+ /**
+ * Run with collection element <code>arg</code>
+ *
+ * @param arg collection element
+ */
+ public void run( T arg );
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/IteratingUtil.java b/org.tizen.common/src/org/tizen/common/util/IteratingUtil.java
new file mode 100644
index 000000000..c01337000
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/IteratingUtil.java
@@ -0,0 +1,27 @@
+package org.tizen.common.util;
+
+import java.util.Iterator;
+
+public class IteratingUtil {
+ public static <T> void iterate( T obj, IteratingAdapter<T> adapter, IteratingRunner<T> runner )
+ {
+ if ( null == obj )
+ {
+ return ;
+ }
+
+ Iterator<T> iter = adapter.adapt( obj );
+ if ( null == iter )
+ {
+ return ;
+ }
+ while ( iter.hasNext() )
+ {
+ T child = iter.next();
+ runner.run( child );
+ iterate( child, adapter, runner );
+ }
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/LocalPortChecker.java b/org.tizen.common/src/org/tizen/common/util/LocalPortChecker.java
index 68c3337ed..da15c1250 100644
--- a/org.tizen.common/src/org/tizen/common/util/LocalPortChecker.java
+++ b/org.tizen.common/src/org/tizen/common/util/LocalPortChecker.java
@@ -38,45 +38,52 @@ import java.net.ServerSocket;
* <li> added getAvailableLocalPort method.
* </ul>
*/
-public class LocalPortChecker {
- public static boolean isPortAvailable(int port) {
- if ((port < 0) && (port > 65535))
- return false;
+public class LocalPortChecker
+{
+
+ public static boolean isPortInRange( final int port )
+ {
+ return ( 0 <= port ) && ( port < 65536 );
+
+ }
+ public static boolean isPortAvailable( final int port )
+ {
+ if ( !isPortInRange( port ) )
+ {
+ return false;
+ }
ServerSocket socket = null;
- try {
- socket = new ServerSocket(port);
+ try
+ {
+ socket = new ServerSocket( port );
return true;
- } catch (IOException e) {
- return false;
- } finally {
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- // do nothing
- }
- }
- }
- }
-
- public static int getAvailableLocalPort(int inc,int portBase) {
- int port = portBase;
- if (isPortAvailable(port)) {
- return port;
}
-
- if ( (port+inc) > 65535) {
- return -1;
+ catch ( final IOException e )
+ {
+ return false;
}
-
- while ((port < 65535) && !isPortAvailable(port)) {
- port += inc;
+ finally
+ {
+ IOUtil.tryClose( socket );
}
-
- if (isPortAvailable(port))
- return port;
- else
- return -1;
+ }
+
+ public static int
+ getAvailableLocalPort(
+ final int inc,
+ final int portBase
+ )
+ {
+ for ( int port = portBase ; true ; port += inc )
+ {
+ if ( !isPortInRange( port) )
+ {
+ return -1;
+ }
+ if ( isPortAvailable( port ) ) {
+ return port;
+ }
+ }
}
}
diff --git a/org.tizen.common/src/org/tizen/common/util/MapUtil.java b/org.tizen.common/src/org/tizen/common/util/MapUtil.java
new file mode 100644
index 000000000..f721875af
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/MapUtil.java
@@ -0,0 +1,219 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.tizen.common.util.StringUtil.NULL_STRING;
+
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * MapUtil.
+ *
+ * Helper related to {@link Map}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class MapUtil
+{
+ /**
+ * protected constructor
+ */
+ protected MapUtil() {}
+
+ /**
+ * Return <code>map</code>'s size
+ *
+ * Return <code>0</code>, if <code>map</code> is <code>null</code>
+ *
+ * @param map {@link Map} to count elements
+ *
+ * @return the number of element in <code>map</code>
+ */
+ public static
+ int
+ length(
+ final Map<?, ?> map
+ )
+ {
+ if ( null == map )
+ {
+ return 0;
+ }
+ return map.size();
+ }
+
+
+ /**
+ * Check if <code>map</code> is empty
+ *
+ * Return <code>true</code>, if <code>map</code> is <code>null</code> or has no element
+ *
+ * @param map {@link Map} to check
+ *
+ * @return if map is empty
+ */
+ public static
+ boolean
+ isEmpty(
+ final Map<?, ?> map
+ )
+ {
+ return ( 0 == length( map ) );
+ }
+
+ /**
+ * Return {@link Map} for <code>keys</code> and <code>values</code>
+ *
+ * add i th object of <code>values</code> with i th object of <code>keys</code> as key
+ *
+ * @param <K> key type
+ * @param <V> value type
+ * @param keys keys to add
+ * @param values values to add
+ *
+ * @return {@link Map} containing <code>keys</code> - <code>values</code> pairs
+ */
+ public static <K, V>
+ Map<K, V>
+ asMap(
+ final K[] keys,
+ final V[] values
+ )
+ {
+ final HashMap<K, V> map = new HashMap<K, V>();
+ if ( null == keys || null == values )
+ {
+ return map;
+ }
+
+ for ( int i=0, n=Math.min( keys.length, values.length ) ; i<n ; ++i )
+ {
+ map.put( keys[i], values[i] );
+ }
+ return map;
+ }
+
+
+ /**
+ * Return {@link Map} for <code>objs</code>
+ *
+ * <code>objs</code> is {@link Object[]} that each element is key-value pair.
+ *
+ * @param <A> key type
+ * @param <B> value type
+ * @param objs key-value pairs to add
+ *
+ * @return created {@link Map}
+ */
+ @SuppressWarnings("unchecked")
+ public static <A extends Object, B extends Object>
+ Map<A, B>
+ asMap(
+ final Object[][] objs
+ )
+ {
+ final HashMap<A, B> map = new HashMap<A, B>();
+ for ( int i=0, n=ArrayUtil.size( objs ) ; i<n ; ++i )
+ {
+ if ( 2 != objs[i].length )
+ {
+ continue;
+ }
+ map.put( (A) objs[i][0], (B) objs[i][1] );
+ }
+ return map;
+ }
+
+ /**
+ * Add {@link Properties}'s key-value pairs to <code>map</code>
+ *
+ * @param props {@link Properties} to provide key-value pairs
+ * @param map {@link Map} to be added
+ */
+ public static
+ void
+ mergePropertiesIntoMap(
+ final Properties props,
+ final Map<Object, Object> map
+ )
+ {
+ if ( null == map )
+ {
+ throw new NullPointerException();
+ }
+ if ( null == props )
+ {
+ return ;
+ }
+
+ final Enumeration<?> en = props.propertyNames();
+ while ( en.hasMoreElements() )
+ {
+ final String key = (String) en.nextElement();
+ map.put( key, props.getProperty( key ) );
+ }
+ }
+
+ /**
+ * Return string to present {@link Map} for human
+ *
+ * @param map {@link Map} to print out
+ *
+ * @return string of presentation
+ */
+ public static
+ String
+ toString(
+ final Map<?, ?> map
+ )
+ {
+ if ( null == map )
+ {
+ return NULL_STRING;
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ buffer.append( "{" );
+
+ if ( !map.isEmpty() )
+ {
+ buffer.append( "\n" );
+ for ( final Object key : map.keySet() )
+ {
+ buffer.append( "\t" );
+ buffer.append( key.toString() );
+ buffer.append( "=" );
+ buffer.append( map.get( key ) );
+ buffer.append( "\n" );
+ }
+ }
+ buffer.append( "}" );
+ return buffer.toString();
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/NotificationType.java b/org.tizen.common/src/org/tizen/common/util/NotificationType.java
index 3e8d5a8a7..ede8c87f5 100644
--- a/org.tizen.common/src/org/tizen/common/util/NotificationType.java
+++ b/org.tizen.common/src/org/tizen/common/util/NotificationType.java
@@ -25,7 +25,7 @@
package org.tizen.common.util;
import org.eclipse.swt.graphics.Image;
-import org.tizen.common.cache.ImageCache;
+import org.tizen.common.util.cache.ImageCache;
public enum NotificationType {
diff --git a/org.tizen.common/src/org/tizen/common/util/NotifierDialog.java b/org.tizen.common/src/org/tizen/common/util/NotifierDialog.java
index 047425327..3944a1954 100644
--- a/org.tizen.common/src/org/tizen/common/util/NotifierDialog.java
+++ b/org.tizen.common/src/org/tizen/common/util/NotifierDialog.java
@@ -41,14 +41,13 @@ import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
-import org.tizen.common.cache.ColorCache;
-import org.tizen.common.cache.FontCache;
+import org.tizen.common.util.cache.ColorCache;
+import org.tizen.common.util.cache.FontCache;
public class NotifierDialog {
@@ -133,7 +132,7 @@ public class NotifierDialog {
// get the size of the drawing area
Rectangle rect = _shell.getClientArea();
// create a new image with that size
- Image newImage = new Image(Display.getDefault(), Math.max(1, rect.width), rect.height);
+ Image newImage = new Image(SWTUtil.getDisplay(), Math.max(1, rect.width), rect.height);
// create a GC object we can use to draw with
GC gc = new GC(newImage);
@@ -315,14 +314,14 @@ public class NotifierDialog {
}
_shell.setAlpha(cur);
- Display.getDefault().timerExec(FADE_TIMER, this);
+ SWTUtil.getDisplay().timerExec(FADE_TIMER, this);
} catch (Exception err) {
err.printStackTrace();
}
}
};
- Display.getDefault().timerExec(FADE_TIMER, run);
+ SWTUtil.getDisplay().timerExec(FADE_TIMER, run);
}
private static void startTimer(final Shell _shell) {
@@ -340,7 +339,7 @@ public class NotifierDialog {
}
};
- Display.getDefault().timerExec(DISPLAY_TIME, run);
+ SWTUtil.getDisplay().timerExec(DISPLAY_TIME, run);
}
@@ -367,7 +366,7 @@ public class NotifierDialog {
_shell.setAlpha(cur);
- Display.getDefault().timerExec(FADE_TIMER, this);
+ SWTUtil.getDisplay().timerExec(FADE_TIMER, this);
} catch (Exception err) {
err.printStackTrace();
@@ -375,7 +374,7 @@ public class NotifierDialog {
}
};
- Display.getDefault().timerExec(FADE_TIMER, run);
+ SWTUtil.getDisplay().timerExec(FADE_TIMER, run);
}
}
diff --git a/org.tizen.common/src/org/tizen/common/util/OSChecker.java b/org.tizen.common/src/org/tizen/common/util/OSChecker.java
index 3331a46ac..9890ab0c6 100644
--- a/org.tizen.common/src/org/tizen/common/util/OSChecker.java
+++ b/org.tizen.common/src/org/tizen/common/util/OSChecker.java
@@ -26,6 +26,7 @@ package org.tizen.common.util;
/**
* @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
+ * @author Gyeongseok Seo {@literal <gyeongseok.seo@samsung.com>} (S-Core)
* <ul>
* <li> initial creation
* <li> thanks to Yoon Kyung Koo
@@ -35,12 +36,14 @@ public class OSChecker {
//
// OS ID constants
//
- public final static int WINDOWS = 0x0001;
- public final static int MAC = 0x0002;
- public final static int LINUX = 0x0004;
- public final static int UNIX = 0x0008;
- public final static int AIX = 0x0010;
- public final static int SOLARIS = 0x0020;
+ public final static int WINDOWS = 0x0100;
+ public final static int WINDOWSXP = 0x0101;
+ public final static int WINDOWS7 = 0x0102;
+ public final static int MAC = 0x0200;
+ public final static int LINUX = 0x0400;
+ public final static int UNIX = 0x0800;
+ public final static int AIX = 0x1000;
+ public final static int SOLARIS = 0x2000;
//
// Vendor constants
@@ -71,6 +74,11 @@ public class OSChecker {
if (osName.indexOf("WINDOWS") >= 0) {
osID |= OSChecker.WINDOWS;
+ if ( ObjectUtil.equals(osName, "WINDOWS XP") ) {
+ osID |= OSChecker.WINDOWSXP;
+ } else if ( ObjectUtil.equals(osName, "WINDOWS 7") ) {
+ osID |= OSChecker.WINDOWS7;
+ }
} else if (osName.indexOf("MAC") >= 0) {
osID |= OSChecker.MAC;
} else if (osName.indexOf("LINUX") >= 0) {
@@ -108,6 +116,13 @@ public class OSChecker {
return ((osID & OSChecker.WINDOWS) > 0);
}
+ public static boolean isWindowsXP() {
+ return (osID == OSChecker.WINDOWSXP);
+ }
+ public static boolean isWindows7() {
+ return (osID == OSChecker.WINDOWS7);
+ }
+
public static boolean isMAC() {
return ((osID & OSChecker.MAC) > 0);
}
@@ -157,4 +172,14 @@ public class OSChecker {
return (vendorID == 0);
}
+ /* querying arch */
+ public static boolean is64bit() {
+ boolean is64bit = false;
+ if ( OSChecker.isWindows() ) {
+ is64bit = (System.getenv("ProgramFiles(x86)") != null);
+ } else {
+ is64bit = (System.getProperty("os.arch").indexOf("64") != -1);
+ }
+ return is64bit;
+ }
}
diff --git a/org.tizen.common/src/org/tizen/common/util/ObjectUtil.java b/org.tizen.common/src/org/tizen/common/util/ObjectUtil.java
new file mode 100644
index 000000000..3c0f2f8e6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/ObjectUtil.java
@@ -0,0 +1,411 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.tizen.common.util.StringUtil.NULL_STRING;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.SecureRandom;
+import java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * ObjectUtil.
+ *
+ * Helper related to <code>Object</code> or generic logic
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class ObjectUtil {
+
+ /**
+ * protected constructor
+ */
+ protected ObjectUtil() {}
+
+ /**
+ * Returns first non-null element in args
+ * <br>
+ * Returns null if no non-null element
+ *
+ * @param <T> arguments' type
+ * @param args arguments to check
+ *
+ * @return non-null element in <code>args</code>
+ */
+ public static <T> T nvl( T... args )
+ {
+ if ( null == args )
+ {
+ return null;
+ }
+
+ for ( final T arg : args )
+ {
+ if ( null != arg )
+ {
+ return arg;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Hexadecimal IP
+ */
+ private static String hexServerIP = null;
+
+ /**
+ * Seed generator for GUID
+ */
+ private static final SecureRandom SEEDER = new SecureRandom();
+
+ /**
+ * Compares two objects.
+ * <br>
+ * {@link Object#equals(Object)} is used for equality but this needs null check.
+ * <br>
+ * two object are equal if both are <code>null</code>
+ * <br>
+ * <pre>
+ * if ( null == obj1 ) {
+ * if ( obj1 == obj2 ) {
+ * ...
+ * }
+ * } else if ( obj1.equals( obj2 ) ) {
+ * ...
+ * }
+ * </pre>
+ * If you use this method
+ * <pre>
+ * if ( ObjectUtils.equals( obj1, obj2 ) ) {
+ * ...
+ * }
+ * </pre>
+ * Recursively compre if object is {@link Collection} or array
+ * <br>
+ *
+ * @param obj1 object1 to compare
+ * @param obj2 object2 to compare
+ *
+ * @return <code>true</code> if two object are equal
+ */
+ @SuppressWarnings({
+ "unchecked", "rawtypes"
+ })
+ public static
+ boolean
+ equals(
+ final Object obj1,
+ final Object obj2
+ )
+ {
+ if ( obj1 == obj2 )
+ {
+ return true;
+ }
+ if ( null == obj1 || null == obj2 )
+ {
+ return false;
+ }
+
+ if ( !obj1.getClass().isArray() || !obj2.getClass().isArray() )
+ {
+ return obj1.equals( obj2 );
+ }
+
+ // in case of array
+ if ( obj1 instanceof boolean[] && obj2 instanceof boolean[] )
+ {
+ return Arrays.equals( ( boolean[] ) obj1, ( boolean[] ) obj2 );
+ }
+ else if ( obj1 instanceof byte[] && obj2 instanceof byte[] )
+ {
+ return Arrays.equals( ( byte[] ) obj1, ( byte[] ) obj2 );
+ }
+ else if ( obj1 instanceof char[] && obj2 instanceof char[] )
+ {
+ return Arrays.equals( ( char[] ) obj1, ( char[] ) obj2 );
+ }
+ else if ( obj1 instanceof double[] && obj2 instanceof double[] )
+ {
+ return Arrays.equals( ( double[] ) obj1, ( double[] ) obj2 );
+ }
+ else if ( obj1 instanceof float[] && obj2 instanceof float[] )
+ {
+ return Arrays.equals( ( float[] ) obj1, ( float[] ) obj2 );
+ }
+ else if ( obj1 instanceof int[] && obj2 instanceof int[] )
+ {
+ return Arrays.equals( ( int[] ) obj1, ( int[] ) obj2 );
+ }
+ else if ( obj1 instanceof long[] && obj2 instanceof long[] )
+ {
+ return Arrays.equals( ( long[] ) obj1, ( long[] ) obj2 );
+ }
+ else if ( obj1 instanceof short[] && obj2 instanceof short[] )
+ {
+ return Arrays.equals( ( short[] ) obj1, ( short[] ) obj2 );
+ }
+ else if ( obj1 instanceof Collection && obj2 instanceof Collection )
+ {
+ return CollectionUtil.equals( (Collection) obj1, (Collection) obj2 );
+ }
+ else if ( obj1 instanceof Object[] && obj2 instanceof Object[] )
+ {
+ return CollectionUtil.equals( (Object[]) obj1, (Object[]) obj2 );
+ }
+ return false;
+ }
+
+ /**
+ * Convert byte[] to integer
+ *
+ * @param bytes byte array to convert
+ *
+ * @return converted integer
+ */
+ public static
+ int
+ getInt(
+ final byte bytes[]
+ )
+ {
+ int i= 0;
+ int j= 24;
+ for( int k=0 ; 0<=j ; ++k )
+ {
+ int l = bytes[k] & 0xff;
+ i += l << j;
+ j -= 8;
+ }
+ return i;
+ }
+
+ /**
+ * Pad <code>str</code> to string with <code>length</code> length
+ *
+ * Return <code>str</code> if string's length is greater than <code>length</code>
+ *
+ * The padding character is '0'
+ *
+ * @param str string to pad
+ * @param length length to pad
+ *
+ * @return padded string
+ */
+ private static
+ String
+ padHex(
+ final String str,
+ final int length
+ )
+ {
+ final StringBuilder buffer = new StringBuilder();
+ for( int j=0, n=length-str.length() ; j<n ; ++j )
+ {
+ buffer.append( '0' );
+ }
+ buffer.append( str );
+ return buffer.toString();
+ }
+
+ /**
+ * Convert <code>i</code> to hexadecimal with <code>j</code> length
+ *
+ * @param i decimal to convert
+ * @param j hexadecimal's length
+ *
+ * @return converted hexadecimal
+ */
+ public static
+ String
+ hexFormat(
+ final int i,
+ final int j
+ )
+ {
+ final String s = Integer.toHexString( i );
+ return padHex( s, j );
+ }
+
+
+ /**
+ * Create GUID with 32 bytes
+ *
+ * GUID is used for system( programe ) not human
+ *
+ * Structure
+ * +-----------------+--------------+----------------------+------------------+
+ * | Current Time(8) | Server IP(8) | Object Hash Value(8) | Random Number(8) |
+ * +-----------------+--------------+----------------------+------------------+
+ *
+ * @param obj object to hash
+ * @return create guid
+ */
+ public static final
+ String
+ generateGUID(
+ final Object obj
+ )
+ {
+ final StringBuilder guid = new StringBuilder( 32 );
+
+ // time
+ long timeNow = System.currentTimeMillis();
+ int timeLow = (int) timeNow& 0xFFFFFFFF;
+ guid.append( hexFormat( timeLow, 8 ) );
+
+ // server IP
+ if ( null == hexServerIP )
+ {
+ InetAddress localInetAddress = null;
+ try
+ {
+ // get the inet address
+ localInetAddress = InetAddress.getLocalHost();
+ }
+ catch( final UnknownHostException uhe )
+ {
+ try
+ {
+ localInetAddress = InetAddress.getByName( "localhost" );
+ }
+ catch ( final UnknownHostException e )
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ byte serverIP[] = localInetAddress.getAddress();
+
+ hexServerIP = hexFormat( getInt( serverIP ), 8 );
+ }
+ guid.append( hexServerIP );
+
+ // object hash
+ guid.append( hexFormat( System.identityHashCode( obj ), 8 ) );
+
+ // random number
+ int node= -1;
+ synchronized( SEEDER )
+ {
+ node = SEEDER.nextInt();
+ }
+ guid.append( hexFormat( node, 8 ) );
+ return guid.toString();
+ }
+
+ /* Serialize / Deserialize */
+ /**
+ * Serialize object
+ *
+ * @param obj object to serialize
+ *
+ * @return serialized byte array
+ *
+ * @throws IOException If serialization is fail
+ *
+ * @see ObjectOutputStream#writeObject( Object )
+ */
+ public static
+ byte[]
+ serialize(
+ final Object obj
+ )
+ throws IOException
+ {
+ final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ final ObjectOutputStream objOut = new ObjectOutputStream( byteOut );
+ objOut.writeObject( obj );
+ return byteOut.toByteArray();
+ }
+
+ /**
+ * Deserialize byte array
+ *
+ * @param bytes bytes to deserialize
+ *
+ * @return Deserialized object
+ *
+ * @throws IOException If deserialization is fail
+ *
+ * @throws ClassNotFoundException If No class
+ *
+ * @see ObjectInputStream#readObject()
+ */
+ public static
+ Object
+ deserialize(
+ final byte[] bytes
+ )
+ throws IOException, ClassNotFoundException
+ {
+ Assert.notNull( bytes, "bytes must not be null" );
+ final ByteArrayInputStream byteIn = new ByteArrayInputStream( bytes );
+ final ObjectInputStream objIn = new ObjectInputStream( byteIn );
+ return objIn.readObject();
+ }
+
+ /**
+ * Create and return object's simple name
+ *
+ * Use 4 hash value instead of 8 hash value
+ *
+ * @param obj object to convert
+ *
+ * @return textual string for <code>obj</code>
+ */
+ public static
+ String
+ toString(
+ final Object obj
+ )
+ {
+ if ( null == obj )
+ {
+ return NULL_STRING;
+ }
+ final StringBuilder builder = new StringBuilder();
+ builder.append( obj.getClass().getSimpleName() );
+ builder.append( '@' );
+ int hash = obj.hashCode();
+
+ for ( int i = 8 ; i>=0 ; i-=8 )
+ {
+ StringUtil.appendHexa( builder, 0xFF & ( hash >> i ) );
+ }
+
+
+ return builder.toString();
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/ParsingUtil.java b/org.tizen.common/src/org/tizen/common/util/ParsingUtil.java
new file mode 100644
index 000000000..6d91b9430
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/ParsingUtil.java
@@ -0,0 +1,183 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+
+/**
+ * ParsingUtil.
+ *
+ * Helper related to parsing of textual implication
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class ParsingUtil
+{
+
+ /**
+ * semantic <code>true</code>
+ */
+ protected static final Collection<String> BOOLEAN_TRUE =
+ Collections.unmodifiableCollection( new HashSet<String>( Arrays.asList(
+ "1", "yes", "y", "true", "t"
+ ) ) );
+
+ /**
+ * sematic <code>false</code>
+ */
+ protected static final Collection<String> BOOLEAN_FALSE =
+ Collections.unmodifiableCollection( new HashSet<String>( Arrays.asList(
+ "no, n", "false", "f", "0"
+ ) ) );
+
+ /**
+ * parse text and convert to <code>boolean</code>
+ *
+ * return <code>defaultValue</code> if can't parse or convert
+ *
+ * @param value string to parse
+ * @param defaultValue default value when exception case
+ *
+ * @return converted <code>boolean</code> value
+ */
+ public static
+ boolean
+ parseBoolean(
+ final String value,
+ final boolean defaultValue
+ )
+ {
+ if ( null == value )
+ {
+ return defaultValue;
+ }
+
+ final String safe = StringUtil.trim( value ).toLowerCase();
+ return ((defaultValue)?BOOLEAN_FALSE:BOOLEAN_TRUE).contains( safe ) ^ defaultValue;
+
+ }
+
+ /**
+ * parse text and convert to <code>int</code>
+ *
+ * return <code>defaultValue</code> if can't parse or convert
+ *
+ * @param value string to parse
+ * @param defaultValue default value when exception case
+ *
+ * @return converted <code>int</code> value
+ */
+ public static
+ int parseInt(
+ final String value,
+ final int defaultValue
+ )
+ {
+ if ( null == value )
+ {
+ return defaultValue;
+ }
+
+ final String trimmed = StringUtil.trim( value );
+ try
+ {
+ return Integer.decode( trimmed );
+ } catch ( final Throwable e )
+ {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * parse text and convert to <code>long</code>
+ *
+ * return <code>defaultValue</code> if can't parse or convert
+ *
+ * @param value string to parse
+ * @param defaultValue default value when exception case
+ *
+ * @return converted <code>long</code> value
+ */
+ public static
+ long
+ parseLong(
+ final String value,
+ final long defaultValue
+ )
+ {
+ if ( null == value )
+ {
+ return defaultValue;
+ }
+
+ final String trimmed = StringUtil.trim( value );
+ try
+ {
+ return Long.decode( trimmed );
+ } catch ( final Throwable e )
+ {
+ return defaultValue;
+ }
+
+ }
+
+ /**
+ * parse text and convert to <code>double</code>
+ *
+ * return <code>defaultValue</code> if can't parse or convert
+ *
+ * @param value string to parse
+ * @param defaultValue default value when exception case
+ *
+ * @return converted <code>double</code> value
+ */
+ public static
+ double
+ parseDouble(
+ final String value,
+ final double defaultValue
+ )
+ {
+ if ( null == value )
+ {
+ return defaultValue;
+ }
+
+ final String trimmed = StringUtil.trim( value );
+ try
+ {
+ return Double.valueOf( trimmed );
+ }
+ catch( final Throwable e )
+ {
+ return defaultValue;
+ }
+
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/PluginUtil.java b/org.tizen.common/src/org/tizen/common/util/PluginUtil.java
new file mode 100644
index 000000000..a451c4877
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/PluginUtil.java
@@ -0,0 +1,105 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Kangho Kim <kh5325.kim@samsung.com>
+* Ho Namkoong <ho.namkoong@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.tizen.common.Surrogate;
+
+/**
+ * PluginUtil
+ *
+ * This is a util class for handle extension points of the plugins.
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+public class PluginUtil {
+
+ protected static Surrogate<IExtensionRegistry> platformSurrogate = new Surrogate<IExtensionRegistry>() {
+ public IExtensionRegistry getAdapter()
+ {
+ return Platform.getExtensionRegistry();
+ }
+ };
+
+ /**
+ * Return classes of specific extension point id.
+ * @param extPointId - extension point id.
+ * @return object array of classes of extPointId.
+ */
+ public static Object[] loadClasses(String extPointId) throws CoreException {
+ IExtensionRegistry registry = platformSurrogate.getAdapter();
+ IExtensionPoint ep = registry.getExtensionPoint(extPointId );
+ IExtension[] exts = ep.getExtensions();
+ List<Object> classList = new ArrayList<Object>();
+
+ for ( IExtension ext : exts )
+ {
+ IConfigurationElement[] configs = ext.getConfigurationElements();
+
+ for ( final IConfigurationElement config : configs )
+ {
+ Object cls = (Object) config.createExecutableExtension( "class" );
+ classList.add(cls);
+ }
+ }
+
+ return classList.toArray();
+ }
+
+ /**
+ * Return class of specific class id which extends specific extension point id.
+ * @param extPointId - extension point id.
+ * @param classId - class id.
+ * @return object class of specific class id which extends specific extension point id.
+ */
+ public static Object loadClass(String extPointId, String classId) throws CoreException {
+ IExtensionRegistry registry = platformSurrogate.getAdapter();
+ IExtensionPoint ep = registry.getExtensionPoint(extPointId );
+ IExtension[] exts = ep.getExtensions();
+
+ for ( IExtension ext : exts )
+ {
+ IConfigurationElement[] configs = ext.getConfigurationElements();
+
+ for ( final IConfigurationElement config : configs )
+ {
+ String id = config.getAttribute("id");
+ if(id != null && id.equals(classId)) {
+ return (Object) config.createExecutableExtension( "class" );
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/ProjectUtil.java b/org.tizen.common/src/org/tizen/common/util/ProjectUtil.java
new file mode 100644
index 000000000..31acf7d30
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/ProjectUtil.java
@@ -0,0 +1,199 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Jihoon Song <jihoon80.song@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.util.Map;
+
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.tizen.common.util.log.Logger;
+
+/**
+ * ProjectUtil.
+ *
+ * Helper related to the Eclipse Project (.project)
+ *
+ * @author Jihoon Song{@literal <jihoon80.song@samsung.com>} (S-Core)
+ */
+public class ProjectUtil {
+
+ /**
+ * Null safety project description getter. If project is null, return null.
+ * @param project
+ * @return IProjectDescription
+ * @throws CoreException
+ */
+ public static IProjectDescription getDescription(IProject project) throws CoreException {
+ return (project != null) ? project.getDescription() : null;
+ }
+
+ /**
+ * Null safety project build specification getter
+ * @param project
+ * @return ICommand[]
+ * @throws CoreException
+ */
+ public static ICommand[] getBuildSpec(IProject project) throws CoreException {
+ IProjectDescription description = getDescription( project );
+ return (description != null) ? description.getBuildSpec() : new ICommand[0];
+ }
+
+ /**
+ * Build specification setter
+ * @param project
+ * @param commands
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting is not desired
+ * @throws CoreException
+ */
+ public static void setBuildSpec(IProject project, ICommand[] commands, IProgressMonitor monitor)
+ throws CoreException {
+ IProjectDescription description = getDescription( project );
+ if ( description != null ) { // if project or project description is not null
+ description.setBuildSpec( commands );
+ project.setDescription( description, monitor );
+ }
+ }
+
+ /**
+ * Null safety build command adder
+ * @param oldCommands
+ * @param newCommand
+ * @return ICommand[]
+ */
+ public static ICommand[] addCommand(ICommand[] oldCommands, ICommand newCommand) {
+ // if newCommand is Null
+ if ( newCommand == null ) {
+ if ( oldCommands == null ) { // if argument is Null both, return 0-based array
+ return new ICommand[0];
+ } else {
+ return oldCommands;
+ }
+ }
+
+ // create expanded commands
+ ICommand[] newCommands;
+ if ( oldCommands != null ) {
+ newCommands = new ICommand[ oldCommands.length + 1 ];
+ System.arraycopy( oldCommands, 0, newCommands, 0, oldCommands.length );
+ } else {
+ newCommands = new ICommand[ 1 ];
+ }
+
+ // add new command to last index
+ newCommands[ newCommands.length - 1 ] = newCommand;
+
+ return newCommands;
+ }
+
+ /**
+ * Null safety build command finder. If not found, return null.
+ * @param commands
+ * @param builderID
+ * @return ICommand
+ */
+ public static ICommand findCommand(ICommand[] commands, String builderID) {
+ if ( commands != null ) {
+ for (ICommand command : commands) {
+ String builderName = command.getBuilderName();
+ if ( builderName != null && builderName.equals( builderID ) ){
+ return command;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Null safety build command creater. If project or project description is null, return null.
+ * @param project
+ * @return ICommand
+ * @throws CoreException
+ */
+ public static ICommand newCommand(IProject project) throws CoreException {
+ IProjectDescription description = getDescription( project );
+ return (description != null) ? description.newCommand() : null;
+ }
+
+ /**
+ * Specific build command adder with arguments. If builder ID already exist or is null, ignore this process.
+ * @param project
+ * @param builderID a builder name
+ * @param args a table of command arguments (keys and values must both be of type <code>String</code>), or <code>null</code>
+ * @param monitor a progress monitor, or <code>null</code> if progress reporting is not desired
+ */
+ public static void setBuildCommandWithArgument(IProject project, String builderID,
+ Map<String, String> args, IProgressMonitor monitor) {
+ if ( builderID == null ) { // If builder ID is null
+ return ;
+ }
+
+ try {
+ ICommand[] commands = getBuildSpec( project );
+
+ ICommand findedCommand = findCommand( commands, builderID );
+ if ( findedCommand != null ) { // If builder ID already exist
+ return;
+ }
+
+ ICommand command = newCommand( project );
+ if ( command == null ) {
+ return;
+ }
+
+ command.setBuilderName( builderID );
+ command.setArguments( args );
+
+ ICommand[] newCommands = addCommand( commands, command );
+ setBuildSpec( project, newCommands, monitor );
+ } catch (CoreException e) {
+ Logger.log(e);
+ }
+ }
+
+ /**
+ * Arguments getter in specific build command. If not found, return null.
+ * @param project
+ * @param builderID
+ * @return a table of command arguments (key type : <code>String</code> value type : <code>String</code>), or <code>null</code>
+ */
+ public static Map<String, String> getBuildCommandArgument(IProject project, String builderID) {
+ try {
+ ICommand[] commands = getBuildSpec( project );
+ ICommand command = findCommand( commands, builderID );
+ if ( command != null ) {
+ return command.getArguments();
+ }
+ } catch (CoreException e) {
+ Logger.log(e);
+ }
+
+ return null;
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/PropertyUtil.java b/org.tizen.common/src/org/tizen/common/util/PropertyUtil.java
index 2f7ac97b4..9e338c3ca 100644
--- a/org.tizen.common/src/org/tizen/common/util/PropertyUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/PropertyUtil.java
@@ -24,11 +24,12 @@
*/
package org.tizen.common.util;
+import static org.tizen.common.util.IOUtil.tryClose;
+
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
-import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
@@ -52,11 +53,7 @@ public abstract class PropertyUtil {
} catch (Exception e) {
e.printStackTrace();
} finally {
- if (reader != null)
- try {
- reader.close();
- } catch (IOException e) {
- }
+ tryClose( reader );
}
return props;
}
@@ -68,11 +65,7 @@ public abstract class PropertyUtil {
} catch (Exception e) {
e.printStackTrace();
} finally {
- if (inputStream != null)
- try {
- inputStream.close();
- } catch (IOException e) {
- }
+ tryClose( inputStream );
}
return props;
}
@@ -84,11 +77,7 @@ public abstract class PropertyUtil {
e.printStackTrace();
return false;
} finally {
- if (outputStream != null)
- try {
- outputStream.close();
- } catch (IOException e) {
- }
+ tryClose( outputStream );
}
return true;
}
@@ -103,11 +92,7 @@ public abstract class PropertyUtil {
e.printStackTrace();
return false;
} finally {
- if (writer != null)
- try {
- writer.close();
- } catch (IOException e) {
- }
+ tryClose( writer );
}
return true;
}
diff --git a/org.tizen.common/src/org/tizen/common/util/SWTRunner.java b/org.tizen.common/src/org/tizen/common/util/SWTRunner.java
new file mode 100755
index 000000000..ed2868242
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/SWTRunner.java
@@ -0,0 +1,44 @@
+package org.tizen.common.util;
+
+import org.tizen.common.Cabinet;
+
+abstract public class
+SWTRunner<T>
+implements Runnable, Cabinet<T>
+{
+ protected T data;
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.Cabinet#getData()
+ */
+ @Override
+ public
+ T
+ getData()
+ {
+ return data;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.Cabinet#setData(java.lang.Object)
+ */
+ @Override
+ public
+ void
+ setData(
+ final T data
+ )
+ {
+ this.data = data;
+ }
+
+ @Override
+ public void run()
+ {
+ setData( process() );
+ }
+
+ abstract protected T process();
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/SWTUtil.java b/org.tizen.common/src/org/tizen/common/util/SWTUtil.java
index e9c6f1981..4ee8c7893 100644..100755
--- a/org.tizen.common/src/org/tizen/common/util/SWTUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/SWTUtil.java
@@ -26,29 +26,206 @@ package org.tizen.common.util;
import java.awt.Dimension;
import java.awt.Toolkit;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Resource;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.tizen.common.Cabinet;
+import org.tizen.common.ui.TableToolTipListener;
+@SuppressWarnings("restriction")
public class SWTUtil {
+
+ private SWTUtil() {}
+ // 2012-04-25
+ @Deprecated
public static final String HTML_EXTENSIONS[] = { "html", "htm", "shtml", "shtm", "xhtml"};
+
+ protected static final Collection<?> HTML_EXTENSIONS2 =
+ Collections.unmodifiableCollection( new HashSet<Object>( Arrays.asList( HTML_EXTENSIONS ) ) );
+
+ /**
+ * return {@link Display} in context
+ *
+ * return new {@link Display} if no {@link Display} in context
+ *
+ * @return SWT {@link Display} simply
+ *
+ * @see Display#getCurrent()
+ * @see Display#getDefault();
+ */
+ public static Display getDisplay()
+ {
+ Display dp = Display.getCurrent();
+ if ( null != dp )
+ {
+ return dp;
+ }
+
+ return Display.getDefault();
+ }
+
+ /**
+ * <p>
+ * Return active {@link Shell} in context
+ * </p>
+ * @return active {@link Shell}
+ *
+ * @see #getDisplay()
+ */
+ public static Shell getActiveShell()
+ {
+ final Display dp = getDisplay();
+ if ( null == dp )
+ {
+ return null;
+ }
+
+ return dp.getActiveShell();
+ }
+
+ /**
+ * execute {@link Cabinet#run()} and reeturn the result
+ *
+ * @param runnable object to execute
+ *
+ * @return result to execute
+ */
+ public static
+ <T>
+ T
+ exec(
+ final Cabinet<T> runnable
+ )
+ {
+ syncExec( (Runnable) runnable );
+
+ return runnable.getData();
+ }
+
+ /**
+ * execute {@link Runnable} in SWT thread synchronously
+ *
+ * @param runnable object to execute
+ */
+ public static void syncExec( final Runnable runnable )
+ {
+ syncExec( getDisplay(), runnable );
+ }
+
+ /**
+ * execute {@link Runnable} in SWT thread synchronously
+ *
+ * @param dp SWT <code>Display</code>
+ * @param runnable object to execute
+ */
+ public static void syncExec( final Display dp, final Runnable runnable )
+ {
+ dp.syncExec( runnable );
+ }
+
+ /**
+ * execute {@link Runnable} in SWT thread asynchronously
+ *
+ * @param runnable object to execute
+ */
+ public static void asyncExec( final Runnable runnable )
+ {
+ asyncExec( getDisplay(), runnable );
+ }
+
+ /**
+ * execute {@link Runnable} in SWT thread asynchronously
+ *
+ * @param dp SWT <code>Display</code>
+ * @param runnable object to execute
+ */
+ public static void asyncExec( final Display dp, final Runnable runnable )
+ {
+ dp.asyncExec( runnable );
+ }
+
+ /**
+ * dispose {@link Widget}s
+ *
+ * @param disposables {@link Widget}s to dispose
+ */
+ public static void tryDispose( final Widget... disposables )
+ {
+ if ( null == disposables )
+ {
+ return ;
+ }
+
+ for ( final Widget disposable : disposables )
+ {
+ if ( null == disposable || disposable.isDisposed() )
+ {
+ continue;
+ }
+
+ disposable.dispose();
+ }
+ }
+
+ /**
+ * dispose {@link Resource}s
+ *
+ * @param disposables {@link Resource}s to dispose
+ */
+ public static void tryDispose( final Resource... disposables )
+ {
+ if ( null == disposables )
+ {
+ return ;
+ }
+
+ for ( final Resource disposable : disposables )
+ {
+ if ( null == disposable || disposable.isDisposed() )
+ {
+ continue;
+ }
+
+ disposable.dispose();
+ }
+ }
/**
* Creates SWT <code>Text</code> for input limited digit.
@@ -80,6 +257,7 @@ public class SWTUtil {
/**
* Creates SWT <code>ScrolledComposite</code>.
+ *
* @param width the minimum width or 0 for default width (0 is screen width)
* @param height the minimum height or 0 for default height (0 is screen height)
* @return <code>ScrolledComposite</code>
@@ -103,6 +281,24 @@ public class SWTUtil {
return sc;
}
+
+ /**
+ * Get current active page.
+ *
+ * return null if no active page
+ *
+ * @return active page
+ */
+ public static IWorkbenchPage getActivePage()
+ {
+ final IWorkbenchWindow window = ViewUtil.getWorkbenchWindow();
+
+ if ( null == window )
+ {
+ return null;
+ }
+ return window.getActivePage();
+ }
/**
* Get current active editor.
@@ -111,21 +307,15 @@ public class SWTUtil {
* @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
*/
public static IEditorPart getActiveEditor() {
- IWorkbenchWindow window = ViewUtil.getWorkbenchWindow();
- IWorkbenchPage page = window.getActivePage();
-
- if(page == null){
- return null;
- }
-
- IEditorPart editor = page.getActiveEditor();
- if(editor == null){
+ final IWorkbenchPage page = getActivePage();
+ if(page == null )
+ {
return null;
}
- return editor;
+ return page.getActiveEditor();
}
-
+
/**
* Get editor of file extension.
*
@@ -175,17 +365,9 @@ public class SWTUtil {
* @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
*/
public static boolean isHtmlFile(String fullName) {
- String fileExt = FileUtil.getFileExtension(fullName);
- if (fileExt == null) {
- return false;
- }
+ String fileExt = StringUtil.nvl( FileUtil.getFileExtension(fullName) );
- for (String htmlExt : HTML_EXTENSIONS) {
- if (htmlExt.equalsIgnoreCase(fileExt)) {
- return true;
- }
- }
- return false;
+ return HTML_EXTENSIONS2.contains( fileExt.toLowerCase() );
}
/**
@@ -239,4 +421,72 @@ public class SWTUtil {
return projectPath;
}
-} \ No newline at end of file
+
+ public static void addTableToolTipListener(Table table, TableToolTipListener listener) {
+ listener.setTable(table);
+ table.addListener(SWT.MouseMove, listener);
+ table.addListener(SWT.MouseWheel, listener);
+ table.addListener(SWT.Dispose, listener);
+ table.addListener(SWT.MouseHover, listener);
+ }
+
+ /**
+ * Expands tree and its sub treeitems.
+ *
+ * @param tree target tree to expand.
+ * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+ public static void expandTree(Tree tree) {
+ if(tree == null) {
+ return;
+ }
+ for(TreeItem treeitem: tree.getItems()) {
+ expandTreeItem(treeitem);
+ }
+ }
+
+ private static void expandTreeItem(TreeItem treeItem) {
+ Stack<TreeItem> treeStack = new Stack<TreeItem>();
+ treeStack.add(treeItem);
+ TreeItem selectedItem = null;
+
+ do {
+ selectedItem = treeStack.pop();
+ selectedItem.setExpanded(true);
+
+ if(selectedItem.getItems() != null && selectedItem.getItemCount() != 0) {
+ for (TreeItem childItem : selectedItem.getItems()) {
+ treeStack.add(childItem);
+ }
+ }
+ } while (!treeStack.isEmpty());
+ }
+
+ /**
+ * Make error dialog which prints stack trace of the throwable
+ *
+ * @param title title of the dialog
+ * @param msg message of the dialog
+ * @param t throwable diaog prints out
+ * @param shell parent shell of this dialog
+ * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
+ */
+ public static void errorDialogWithStackTrace(String title, String msg, Throwable t, String pluginId, Shell shell) {
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ t.printStackTrace(pw);
+
+ final String trace = sw.toString();
+
+ List<Status> childStatuses = new ArrayList<Status>();
+
+ for(String line: trace.split("\n")) {
+ childStatuses.add(new Status(IStatus.ERROR, pluginId, line));
+ }
+
+ MultiStatus ms = new MultiStatus(pluginId, IStatus.ERROR, childStatuses.toArray(new Status[] {}), t.getLocalizedMessage(), t);
+
+ ErrorDialog.openError(shell, "Error Dialog", msg, ms);
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/SdbCommandUtil.java b/org.tizen.common/src/org/tizen/common/util/SdbCommandUtil.java
new file mode 100644
index 000000000..4e2545632
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/SdbCommandUtil.java
@@ -0,0 +1,76 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Gun Kim <gune.kim@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.io.File;
+
+import org.tizen.common.core.application.InstallPathConfig;
+import org.tizen.sdblib.IDevice;
+
+/**
+ * SdbCommandUtil.
+ *
+ * sdb helper
+ *
+ * @author Gun Kim{@literal <gune.kim@samsung.com>} (S-Core)
+ */
+public class SdbCommandUtil {
+
+ /**
+ * push file to device
+ *
+ * @param device
+ *
+ * @param source source file path
+ *
+ * @param dest destination file path
+ */
+ public static boolean filePush(IDevice device, String source, String dest){
+ final String command_format = InstallPathConfig.getSDBPath() + " -s %s push %s %s ";
+ if ( device == null ) {
+ return false;
+ }
+
+ if ( !(new File(source).exists()) ) {
+ return false;
+ }
+
+ String command = String.format(command_format, device.getSerialNumber(), source, dest);
+ if (OSChecker.isUnix() ) {
+ command += "1>/dev/null";
+ }
+ else if (OSChecker.isWindows() ) {
+ command += "1>NUL";
+ }
+ String command_result = HostUtil.returnExecute(command);
+
+ if ( "".equals(command_result)) {
+ return true;
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/org.tizen.common/src/org/tizen/common/util/StreamGobbler.java b/org.tizen.common/src/org/tizen/common/util/StreamGobbler.java
index deae67722..da2532407 100644..100755
--- a/org.tizen.common/src/org/tizen/common/util/StreamGobbler.java
+++ b/org.tizen.common/src/org/tizen/common/util/StreamGobbler.java
@@ -24,6 +24,8 @@
*/
package org.tizen.common.util;
+import static org.tizen.common.util.IOUtil.tryClose;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -50,23 +52,26 @@ public class StreamGobbler extends Thread
public void run()
{
StringBuffer buffer = new StringBuffer();
+ BufferedReader br = null;
try {
synchronized (synchronizer) {
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ br = new BufferedReader(new InputStreamReader(is));
String line;
while ( (line = br.readLine()) != null) {
buffer.append(line);
buffer.append("\n");
if ( os != null )
+ {
os.write( (line + "\n").getBytes());
+ }
}
- br.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
result = buffer.toString();
+ tryClose( br );
}
}
public String getResult() {
diff --git a/org.tizen.common/src/org/tizen/common/util/StringUtil.java b/org.tizen.common/src/org/tizen/common/util/StringUtil.java
index c7ccee27e..8b97822af 100644..100755
--- a/org.tizen.common/src/org/tizen/common/util/StringUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/StringUtil.java
@@ -28,10 +28,14 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
+import org.tizen.common.util.log.Logger;
+
/**
* @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
* <ul>
@@ -41,57 +45,170 @@ import java.util.StringTokenizer;
* @author gyeongseok.seo@samsung.com, S-Core Inc.
* <ul>
* <li> added split method.
+ * <li> added removeStart method.
* </ul>
*/
-public class StringUtil {
- public static String trimToNull(String s) {
- return trimToNull(s, null);
- }
+public class StringUtil
+{
+ /**
+ * Empty String
+ */
+ public static final String EMPTY_STRING = "";
- public static String trimToNull(String s, String def) {
- if (s == null) {
- return def;
- }
+ /**
+ * Textual string for <code>null</code>
+ */
+ public static final String NULL_STRING = "<<null>>";
- String t = s.trim();
- if (t.length() == 0) {
- return def;
- }
+ /**
+ * Textual string for empty byte array
+ */
+ public static final String EMPTY_BYTES_STRING = "<<EMPTY BYTES>>";
+
+ /**
+ * Line separator string
+ */
+ public static final String LINE_SEPARATOR = System.getProperty( "line.separator" );
+
+ /**
+ * TAB string
+ */
+ public static final String TAB = "\t";
+
+ /* Dump Format */
+ protected static char CONTROL_CHARS_SHOWER = '.';
+
+ /**
+ * Hexa decimal conversion map
+ */
+ protected static final char[] HEXA_CHARS = new char[] {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+ };
+ /**
+ * The number how many bytes is in int
+ */
+ protected static final int N_INT_BY_BYTE = 4;
+
+ /**
+ * The number how many characters is print out in a line
+ */
+ protected static final int WIDTH_PER_LINE = 16;
+
+ /**
+ * Character to express for control( Human can't control character and control character break log format )
+ */
+ protected static char TWO_BYTES_CHARS_SHOWER = '?';
+
+ /**
+ * Return meaningful value of <code>str</code>
+ *
+ * Return <code>null</code> if <code>str</code> has no implication
+ *
+ * @param str string to check
+ *
+ * @return meaningful string
+ *
+ * @see #trimToNull(String, String)
+ */
+ public static
+ String
+ trimToNull(
+ final String str
+ )
+ {
+ return trimToNull(str, null);
+ }
- return t;
+ /**
+ * Return meaningful value of <code>str</code>
+ *
+ * Return <code>def</code> if <code>str</code> has no implication
+ *
+ * @param str string to check
+ *
+ * @return meaningful string
+ *
+ * @see #getMeaningful(String)
+ * @see #isEmpty(CharSequence)
+ */
+ public static String trimToNull(String str, String def) {
+ final String meaningful = getMeaningful( str );
+ return isEmpty( meaningful )?def:meaningful;
}
- public static InputStream stringToInputStream(String src) {
- if (src == null) {
+ /**
+ * Convert <code>src</code> to {@link InputStream}
+ *
+ * @param src string to convert
+ *
+ * @return {@link InputStream} containing <code>src</code>
+ */
+ public static
+ InputStream
+ toInputStream(
+ final String src
+ )
+ {
+ if ( null == src )
+ {
return null;
}
- return new ByteArrayInputStream(src.getBytes());
+ return new ByteArrayInputStream( src.getBytes() );
}
- public static String[] split(String s, String delim) {
- List<String> list = new ArrayList<String>();
- StringTokenizer st = new StringTokenizer(s, delim);
- while (st.hasMoreTokens()) {
- list.add(st.nextToken());
+ /**
+ * Split <code>str</code> with <code>delimiters</code>
+ *
+ * @param str string to split
+ * @param delimiters delimiters to split with
+ *
+ * @return strings to be split
+ */
+ public static
+ String[] split(
+ final String str,
+ final String delimiters
+ )
+ {
+ final List<String> list = new ArrayList<String>();
+ final StringTokenizer tokenizer = new StringTokenizer( str, delimiters );
+ while ( tokenizer.hasMoreTokens() )
+ {
+ list.add( tokenizer.nextToken() );
}
return (String[]) list.toArray(new String[0]);
}
- public static String getOnlyNumerics(String str) {
- if (str == null) {
+ /**
+ * @param str
+ * @return
+ */
+ public static String getOnlyNumerics(
+ final String str
+ )
+ {
+ if ( null == str )
+ {
return null;
}
- char c;
- StringBuilder sb = new StringBuilder();
+ final StringBuilder sb = new StringBuilder();
- for (int i = 0; i < str.length() ; i++) {
- c = str.charAt(i);
- if (Character.isDigit(c)) {
- sb.append(c);
+ ArrayUtil.iterate(
+ ArrayUtil.convertToWrapper( str.toCharArray() ),
+ new IteratingRunner<Character>()
+ {
+ public void run( Character arg )
+ {
+ if (Character.isDigit( arg )) {
+ sb.append( arg );
+ }
+ }
}
- }
+ );
+
return sb.toString();
}
@@ -104,12 +221,12 @@ public class StringUtil {
return sb.toString();
}
public static String asString(InputStream is) throws IOException{
- StringBuffer out = new StringBuffer();
- byte[] b = new byte[4096];
-
- for (int n; (n = is.read(b)) != -1;)
- out.append(new String(b,0,n));
- return out.toString();
+ StringBuffer out = new StringBuffer();
+ byte[] b = new byte[4096];
+
+ for (int n; (n = is.read(b)) != -1;)
+ out.append(new String(b,0,n));
+ return out.toString();
}
public static String removeEnd(String str, String remove) {
@@ -122,7 +239,886 @@ public class StringUtil {
return str;
}
- public static boolean isEmpty(CharSequence cs) {
- return cs == null || cs.length() == 0;
+ /**
+ * remove string in target string
+ * if target is empty or remove word is empty then just return target string
+ *
+ * @param str - target string
+ * @param remove - remove string
+ * @return removed target string
+ */
+ public static String removeStart(String str, String remove) {
+ if (isEmpty(str) || isEmpty(remove) ) {
+ return str;
+ }
+ if (str.startsWith(remove)){
+ return str.substring(remove.length());
+ }
+ return str;
+ }
+
+ /* Logging */
+ /**
+ * </p>
+ * Append hexa value for <code>ch</code> to <code>buffer</code>
+ *
+ * Hexa value must be two digit. Pad 0 if hexa value has 1 digit.
+ * </p>
+ *
+ * @param buffer {@link StringBuilder} to write
+ * @param ch decimal integer
+ */
+ public static
+ void
+ appendHexa(
+ final StringBuilder buffer,
+ final int ch
+ )
+ {
+ if ( ch < 16 )
+ {
+ // if 1 digit containing hexadecimal
+ buffer.append( '0' );
+ buffer.append( HEXA_CHARS[( 0x0f & ( ch ) )] );
+ }
+ else
+ {
+ // if 2 digit containing hexadecimal
+ buffer.append( HEXA_CHARS[( 0x0f & ( ch >> 4 ) )] );
+ buffer.append( HEXA_CHARS[( 0x0f & ( ch ) )] );
+ }
+ }
+
+ /**
+ * Add end seperation at logging line's end
+ *
+ * @param hexPart hex decimal part
+ * @param textPart text part
+ * @param ret all part
+ */
+ protected static
+ void
+ lineEnd(
+ final StringBuilder hexPart,
+ final StringBuilder textPart,
+ final StringBuilder ret
+ )
+ {
+ // append separator of area
+ hexPart.append( " |" );
+
+ // append separator of termination
+ textPart.append( "|\n" );
+
+ // concatencate two area
+ ret.append( hexPart );
+ ret.append( textPart );
+
+ // clean each area
+ hexPart.delete( 0, hexPart.capacity() );
+ textPart.delete( 0, textPart.capacity() );
+ }
+
+ /**
+ * <p>
+ * Convert <code>data</code> in hexadecimal format for logging or readibility
+ *
+ * Output layout<br>
+ * <table>
+ * <tr><td>Address( or offset )</td><td>byte character</td><td>hexadecimal</td></tr>
+ * </table>
+ *
+ * Replace control character to '.'<br>
+ * </p>
+ *
+ * <code>
+ * Logger logger = ...
+ * byte[] dump = ...
+ * logger.debug( StringUtil.text2hexa( dump ) );
+ * </code>
+ *
+ * @param data byte array to convert
+ *
+ * @return converted textual string
+ *
+ * @see #text2hexa(byte[], int, int)
+ */
+ public static
+ String
+ text2hexa(
+ final byte[] data
+ )
+ {
+ if ( null == data )
+ {
+ return NULL_STRING;
+ }
+ return text2hexa( data, 0, data.length );
+ }
+
+ /**
+ * <p>
+ * Convert data from <code>offset</code> to <code>offset</code> + <code>length</code> in hexadecimal format.
+ *
+ * Output layout<br>
+ * <table>
+ * <tr><td>Address( or offset )</td><td>byte character</td><td>hexadecimal</td></tr>
+ * </table>
+ *
+ * Replace control character to '.'<br>
+ * </p>
+ *
+ * @param data byte array to convert
+ * @param offset start position to convert
+ * @param length length to convert
+ *
+ * @return converted textual string
+ */
+ public static
+ String
+ text2hexa(
+ final byte[] data,
+ final int offset,
+ final int length
+ )
+ {
+
+ if ( null == data )
+ {
+ return NULL_STRING;
+ }
+ if ( data.length <= 0 )
+ {
+ return EMPTY_BYTES_STRING;
+ }
+
+ final ByteArrayInputStream reader = new ByteArrayInputStream( data, offset, length );
+ final StringBuilder ret = new StringBuilder();
+ final StringBuilder hexPart = new StringBuilder();
+ final StringBuilder textPart = new StringBuilder();
+
+ int address = 0;
+ int ch = -1;
+ int printByte = 0;
+ int cnt = 0;
+
+ // fill white space( ' ' ) in address title
+ hexPart.append( " " );
+
+ // make horizontal ruler
+ for ( int i = 0, n = WIDTH_PER_LINE / 4 ; i < n ; i++ )
+ {
+ hexPart.append( "+-------" );
+ textPart.append( "+---" );
+ }
+
+ lineEnd( hexPart, textPart, ret );
+
+ while ( 0 <= ( ch = reader.read() ) )
+ {
+ if ( 0 == cnt )
+ {
+ // calculate and print out start address
+ for ( int i = N_INT_BY_BYTE - 1 ; i >= 0 ; i-- )
+ {
+ printByte = 0xFF & ( address >> ( 8 * i ) );
+ appendHexa( hexPart, printByte );
+ }
+ hexPart.append( " " );
+ address += WIDTH_PER_LINE;
+ }
+
+ appendHexa( hexPart, ch );
+ if ( ( ch & 0x80 ) != 0 || ch < 32 )
+ { // if ch is control character
+ // print out replaced character
+ textPart.append( CONTROL_CHARS_SHOWER );
+ }
+ else
+ {
+ textPart.append( (char) ch );
+ }
+ cnt++;
+
+ if ( WIDTH_PER_LINE == cnt )
+ {
+ lineEnd( hexPart, textPart, ret );
+ cnt = 0;
+ }
+ } // END of while ( 0 <= (ch = reader.read() ) )
+
+ // fill white space( ' ' ) in remaining area
+ if ( 0 != cnt )
+ {
+ for ( ; cnt < WIDTH_PER_LINE ; ++cnt )
+ {
+ hexPart.append( " " );
+ textPart.append( ' ' );
+ }
+ lineEnd( hexPart, textPart, ret );
+ }
+
+ return ret.toString();
+ }
+
+
+ /* Check & Verification */
+ /**
+ * Check that <code>str</code> is <code>null</code> or empty string textually
+ *
+ * @param str string to check
+ *
+ * @return <code>true</code> if <code>str</code> is null or empty string or string containing only white space
+ *
+ * @see StringUtil#hasText( CharSequence )
+ */
+ public static
+ boolean
+ isEmpty(
+ final CharSequence str
+ )
+ {
+ if ( null == str )
+ {
+ return true;
+ }
+
+ for ( int i=0, n=str.length() ; i<n ; ++i )
+ {
+ if ( Character.isWhitespace( str.charAt( i ) ) )
+ {
+ continue;
+ }
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Get length of string
+ *
+ * Return <code>0</code> if <code>str</code> is <code>null</code>
+ *
+ * @param str string whose length is checked
+ *
+ * @return length of <code>str</code>
+ */
+ public static
+ int
+ size(
+ final CharSequence str
+ )
+ {
+ if ( null == str )
+ {
+ return 0;
+ }
+ return str.length();
+ }
+
+ /**
+ * <p>
+ * Check that <code>str</code> contain any character
+ * </p>
+ * @param str string to check
+ *
+ * @return <code>true</code> if <code>str</code> is not <code>null</code> nor empty string
+ *
+ * @see #size(CharSequence)
+ */
+ public static
+ boolean
+ hasLength(
+ final CharSequence str
+ )
+ {
+ return 0 < size( str );
+ }
+
+ /**
+ * Check that <code>str</code> has textual character
+ *
+ * @param str string to check
+ *
+ * @return <code>true</code> if <code>str</code> has textual character
+ *
+ * @see isEmpty( CharSequence )
+ */
+ public static
+ boolean
+ hasText(
+ final CharSequence str
+ )
+ {
+ return !isEmpty( str );
+ }
+
+ /* Conversion */
+ /**
+ * Check <code>strs</code> and return non-null string
+ *
+ * Return empty string if all of element in <code>strs</code>
+ *
+ * @param strs strings to check
+ *
+ * @return non-null in <code>strs</code>
+ *
+ * see #ObjectUtil{@link #nvl(String...)}
+ */
+ public static
+ String
+ nvl(
+ final String... strs
+ )
+ {
+ String val = ObjectUtil.nvl( strs );
+ if ( null == val )
+ {
+ return "";
+ }
+ return val;
+ }
+
+ /**
+ * Trim leading whitespaqce
+ *
+ * @param str string to trim
+ *
+ * @return trimmed string
+ */
+ public static
+ String
+ trimLeading(
+ final String str
+ )
+ {
+ if( !hasLength( str ) )
+ {
+ return str;
+ }
+
+ final char[] chs = str.toCharArray();
+ for ( int i=0, n=chs.length ; i<n ; ++i )
+ {
+ if ( !Character.isWhitespace( chs[i] ) )
+ {
+ return new String( chs, i, str.length() - i );
+ }
+ }
+ return EMPTY_STRING;
+ }
+
+ /**
+ * Trim trailing white space
+ *
+ * @param str string to trim
+ *
+ * @return trimmed string
+ */
+ public static
+ String
+ trimTrailing(
+ final String str
+ )
+ {
+ if( !hasLength( str ) )
+ {
+ return str;
+ }
+
+ final char[] chs = str.toCharArray();
+ for ( int i=chs.length-1, j=chs.length ; 0<j ; --i, --j )
+ {
+ if ( !Character.isWhitespace( chs[i] ) )
+ {
+ return new String( chs, 0, j );
+ }
+ }
+ return EMPTY_STRING;
+ }
+ /**
+ * Remove white spaces at leading and trailing part of <code>str</code>
+ *
+ * Return empty string if <code>str</code> is <code>null</code>
+ *
+ * @param str string to convert
+ *
+ * @return converted string
+ *
+ * @see StringUtil#trimLeading(String)
+ * @see StringUtil#trimTrailing(String)
+ */
+ public static
+ String
+ trim(
+ final String str
+ ) {
+ return trimTrailing( trimLeading( str ) );
+ }
+
+ /**
+ * Convert <code>str</code> to meaningful for search
+ *
+ * @param str string to convert
+ *
+ * @return converted string
+ */
+ public static
+ String
+ getMeaningful(
+ final String str
+ ) {
+ if ( null == str )
+ {
+ return EMPTY_STRING;
+ }
+ return trim( str ).toLowerCase();
+ }
+
+ /**
+ * Mask <code>str</code> with <code>maskingStr</code>
+ *
+ * Replace <code>str</code> to <code>maskingStr</code> with <code>str</code>'s length
+ *
+ * @param str string to mask
+ * @param maskingStr string to mask with
+ *
+ * @return masked string
+ */
+ public static
+ String
+ mask(
+ final String str,
+ final String maskingStr
+ ) {
+ if ( null == str )
+ {
+ return "null";
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ for ( int i=0, n=str.length() ; i<n ; ++i )
+ {
+ buffer.append( maskingStr );
+ }
+ return buffer.toString();
+ }
+
+ /* Analysis & Extract */
+ /**
+ * Extract <code>targetIndex</code> string from strings
+ *
+ * where <code>str</code> is splitted by <code>delimeter</code>
+ *
+ * @param str string with <code>delimeter</code>
+ * @param delimeter what split <code>str</code> with
+ * @param escaper escape character for <code>delimter</code>
+ * @param targetIndex index from fragments
+ *
+ * @return extracted string
+ */
+ public static
+ String
+ getParamater(
+ final String str,
+ final char delimeter,
+ final int escaper,
+ final int targetIndex
+ )
+ throws IOException
+ {
+ try
+ {
+ if ( null == str )
+ {
+ return null;
+ }
+ final StringReader reader = new StringReader( str );
+ StringWriter writer = null;
+ int ch = 0;
+ final int ST_NORMAL = 0;
+ final int ST_ESCAPE = 1;
+ int status = ST_NORMAL;
+ int index = 0;
+ if ( 0 == targetIndex )
+ {
+ writer = new StringWriter();
+ }
+ while ( 0 <= ( ch = reader.read() ) ) {
+ if ( ST_ESCAPE == status ) {
+ status = ST_NORMAL;
+ } else {
+ if ( escaper == ch ) {
+ status = ST_ESCAPE;
+ continue;
+ } else if ( delimeter == ch ) {
+ if ( index == targetIndex )
+ {
+ return writer.toString();
+ }
+ ++index;
+ if ( index == targetIndex )
+ {
+ writer = new StringWriter();
+ }
+ continue;
+ }
+ }
+ if ( null != writer )
+ {
+ writer.write( (int) ch );
+ }
+ }
+ if ( index == targetIndex )
+ {
+ return writer.toString();
+ }
+ return null;
+ }
+ catch ( final IOException e )
+ {
+ // Never throw
+ throw new IllegalStateException( e );
+ }
+ }
+
+ /**
+ * Return substring starting <code>indexFromLast</code> from last
+ *
+ * @param str original string
+ * @param indexFromLast starting index from last
+ *
+ * @return substring
+ */
+ public static
+ String
+ lastSubstring(
+ final String str,
+ final int indexFromLast
+ )
+ {
+ if ( null == str )
+ {
+ return null;
+ }
+
+ final int length = str.length();
+
+ if ( length < indexFromLast )
+ {
+ return str;
+ }
+
+ return str.substring( length - indexFromLast );
+ }
+
+ /**
+ * Extract last fragment in strings split <code>str</code> with <code>separator</code>
+ *
+ * @param str origin string
+ * @param separator string for separation
+ *
+ * @return last fragment string
+ */
+ public static
+ String
+ getLastSegment(
+ final String str,
+ final String separator
+ )
+ {
+ if ( null == str )
+ {
+ return EMPTY_STRING;
+ }
+
+ final int index = str.lastIndexOf( separator );
+ if ( index < 0 )
+ {
+ return str;
+ }
+
+ return str.substring( index + separator.length() );
+ }
+
+ /**
+ * Extract last fragment in string and return remaining string with <code>separator</code>
+ *
+ * @param str origin string
+ * @param separator string for separation
+ *
+ * @return remaining string
+ */
+ public static
+ String
+ removeLastSegment(
+ final String str,
+ final String separator
+ )
+ {
+ if ( null == str )
+ {
+ return EMPTY_STRING;
+ }
+
+ final int index = str.lastIndexOf( separator );
+
+ if ( index < 0 )
+ {
+ return EMPTY_STRING;
+ }
+
+ return str.substring( 0, index );
+
+ }
+
+ /**
+ * Make <code>n</code> repeated <code>symbol</code> string
+ *
+ * @param symbol composing string
+ * @param n repeat count
+ *
+ * @return made string
+ */
+ public static
+ String
+ multiply(
+ final String symbol,
+ final int n
+ )
+ {
+ if ( null == symbol ) {
+ return EMPTY_STRING;
+ }
+
+ final StringBuilder buffer = new StringBuilder();
+ for ( int i=0 ; i<n ; ++i )
+ {
+ buffer.append( symbol );
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Check that <code>str</code> contain white spaces
+ *
+ * @param str string to check
+ * @return <code>true</code> if <code>str</code> contain white spaces
+ */
+ public static
+ boolean
+ containsWhitespace(
+ final CharSequence str
+ )
+ {
+ final int nChar = size( str );
+
+ for ( int i= 0; i< nChar; ++i )
+ {
+ if ( Character.isWhitespace( str.charAt( i ) ) )
+ {
+ return true;
+ }
+ }
+ return false;
}
+
+
+ /**
+ * Trim leading <code>leadingCharacter</code> from <code>str</code>
+ *
+ * @param str string to trim
+ * @param leadingCharacter character to trim with
+ *
+ * @return trimmed string
+ */
+ public static
+ String
+ trimLeadingCharacter(
+ final String str,
+ final char leadingCharacter
+ )
+ {
+ if( !hasLength( str ) )
+ {
+ return str;
+ }
+
+ final char[] chs = str.toCharArray();
+ for ( int i=0, n=chs.length ; i<n ; ++i )
+ {
+ if ( leadingCharacter != chs[i] )
+ {
+ return new String( chs, i, str.length() - i );
+ }
+ }
+ return EMPTY_STRING;
+ }
+
+ /**
+ * Trim trailing <code>trailingCharacter</code> from <code>str</code>
+ *
+ * @param str string to trim
+ * @param trailingCharacter character to trim with
+ *
+ * @return trimmed string
+ */
+ public static
+ String
+ trimTrailingCharacter(
+ final String str,
+ final char trailingCharacter
+ )
+ {
+ if( !hasLength( str ) )
+ {
+ return str;
+ }
+
+ final char[] chs = str.toCharArray();
+ for ( int i=chs.length-1, j=chs.length ; 0<j ; --i, --j )
+ {
+ if ( trailingCharacter != chs[i] )
+ {
+ return new String( chs, 0, j );
+ }
+ }
+ return EMPTY_STRING;
+ }
+
+ /**
+ * Trim <code>str</code> with <code>character</code>
+ *
+ * @param str string to trim
+ * @param character character to trim with
+ *
+ * @return trimmed string
+ */
+ public static
+ String
+ trimCharacter(
+ final String str,
+ final char character
+ )
+ {
+ return trimTrailingCharacter( trimLeadingCharacter( str, character ), character );
+ }
+
+ /**
+ * Extract word at <coode>index</code> column in <code>doc</code>
+ *
+ * @param doc full string
+ * @param index column index
+ *
+ * @return word at <code>index</code> column
+ */
+ public static
+ String
+ getWord(
+ final String doc,
+ final int index
+ )
+ {
+ final StringBuilder buffer = new StringBuilder();
+
+ int position = index;
+
+ if ( doc.length() < index )
+ {
+ return "";
+ }
+
+ for ( int i = position - 1 ; 0 <= i ; --i )
+ {
+
+ int ch = doc.charAt( i );
+
+ if ( Character.isWhitespace( ch ) )
+ {
+ break;
+ }
+ buffer.append( (char) ch );
+ }
+ buffer.reverse();
+
+ for ( int i = position , n = doc.length() ; i < n ; ++i )
+ {
+ int ch = doc.charAt( i );
+ if ( Character.isWhitespace( ch ) )
+ {
+ break;
+ }
+ buffer.append( (char) ch );
+ }
+
+ return buffer.toString();
+ }
+
+ /**
+ * Extract word in front of <coode>index</code> column in <code>doc</code>
+ *
+ * @param doc full string
+ * @param index column index
+ *
+ * @return word in front of <code>index</code> column
+ */
+ public static
+ String
+ getPreviousWord(
+ final String doc,
+ final int index
+ )
+ {
+ final StringBuilder buffer = new StringBuilder();
+
+ if ( index < 0 || doc.length() < index )
+ {
+ Logger.debug( "Index[{0}] is out of bound :[0:{1}]", index, doc.length() );
+ return "";
+ }
+
+ int ch = 0;
+ boolean bNeedWord = false;
+ if ( index < doc.length() )
+ {
+ ch = doc.charAt( index );
+ bNeedWord = Character.isWhitespace( ch );
+ }
+ Logger.debug( "Character at index :'{0}'", (char ) ch );
+ for ( int i = index - 1 ; 0 <= i ; --i )
+ {
+ ch = doc.charAt( i );
+
+ if ( Character.isWhitespace( ch ) )
+ {
+ if ( bNeedWord )
+ {
+ continue;
+ }
+ Logger.debug( "Meet space at column {0}", i );
+ break;
+ }
+ bNeedWord = false;
+ buffer.append( (char) ch );
+ }
+
+ return buffer.reverse().toString();
+ }
+
+ /**
+ * Enum to String array
+ *
+ * @param values enum values
+ *
+ * @return string array
+ */
+ public static <T extends Enum<T>> String[] enumNameToStringArray(T[] values) {
+ int i = 0;
+ String[] result = new String[values.length];
+ for (T value: values) {
+ result[i++] = value.name();
+ }
+ return result;
+ }
+
}
diff --git a/org.tizen.common/src/org/tizen/common/util/ThreadUtil.java b/org.tizen.common/src/org/tizen/common/util/ThreadUtil.java
new file mode 100644
index 000000000..d51eed74a
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/ThreadUtil.java
@@ -0,0 +1,60 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+/**
+ * ThreadUtil.
+ *
+ * Helper related to <code>Thread</code>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+ThreadUtil
+{
+ protected ThreadUtil() {}
+
+ /**
+ * try to invoke {@link Thread#sleep(long)} in safe
+ *
+ * handle <code>milliseconds</code> to zero( 0 ) if it is negative
+ *
+ * @param milliseconds time to sleep in milliseconds
+ *
+ * @see Thread#sleep(long)
+ */
+ public static void trySleep( final long milliseconds )
+ {
+ if ( milliseconds <=0 )
+ {
+ return ;
+ }
+ try {
+ Thread.sleep( milliseconds );
+ } catch ( InterruptedException e ) {
+ }
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/ValidationUtil.java b/org.tizen.common/src/org/tizen/common/util/ValidationUtil.java
new file mode 100644
index 000000000..3f2de9370
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/ValidationUtil.java
@@ -0,0 +1,94 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Changhyun Lee <changhyun1.lee@samsung.com>
+ * Hyeongseok Heo <hyeongseok.heo@samsung.com>
+ * BonYong Lee <bonyong.lee@samsung.com>
+ * Kangho Kim <kh5325.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+package org.tizen.common.util;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * ValidationUtil.
+ *
+ * Verification Using a regular expression.
+ *
+ * @author Changhyun Lee {@literal <changhyun1.lee@samsung.com>} (S-Core)
+ */
+public class ValidationUtil {
+
+ /**
+ * Check for Email address. RFC 2822 (simplified)Matches a normal email address. Does not check the top-level domain.
+ *
+ * @param value email string
+ *
+ * @return if value is valied email
+ */
+ public static boolean checkForEmail(String value) {
+ String regex = "[A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])??"; //$NON-NLS-1$
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(value);
+
+ return matcher.matches();
+ }
+
+ /**
+ * Check for URL string.
+ *
+ * @param value url string
+ *
+ * @return if value is valied url
+ */
+ public static boolean checkForURL(String value) {
+ String regex = "\\b(https?)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; //$NON-NLS-1$
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(value);
+
+ return matcher.matches();
+ }
+
+ /**
+ * Check for File extension.
+ *
+ * @param value file name
+ * @param extensions valied file extensions
+ *
+ * @return if value is valied file
+ */
+ public static boolean checkForFileExtension(String value, String[] extensions) {
+ if (StringUtil.isEmpty(value) || extensions == null) {
+ return false;
+ }
+
+ for (String ext : extensions) {
+ if (value.endsWith(ext)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/ViewUtil.java b/org.tizen.common/src/org/tizen/common/util/ViewUtil.java
index 05a3ae525..1bb30fb35 100644
--- a/org.tizen.common/src/org/tizen/common/util/ViewUtil.java
+++ b/org.tizen.common/src/org/tizen/common/util/ViewUtil.java
@@ -25,7 +25,6 @@
package org.tizen.common.util;
import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
@@ -41,9 +40,9 @@ public class ViewUtil {
ViewRunnable runnable = new ViewRunnable(id);
if (sync) {
- Display.getDefault().syncExec(runnable);
+ SWTUtil.syncExec( runnable );
} else {
- Display.getDefault().asyncExec(runnable);
+ SWTUtil.asyncExec( runnable );
}
}
@@ -94,15 +93,17 @@ public class ViewUtil {
}
public static IWorkbenchWindow getWorkbenchWindow() {
- IWorkbench workbench = PlatformUI.getWorkbench();
- IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
- if (window == null) {
- if (workbench.getWorkbenchWindowCount() == 1) {
- window = workbench.getWorkbenchWindows()[0];
- }
+ final IWorkbench workbench = PlatformUI.getWorkbench();
+ final IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
+ if ( window != null )
+ {
+ return window;
}
-
- return window;
+ if ( workbench.getWorkbenchWindowCount() == 0 )
+ {
+ return null;
+ }
+ return workbench.getWorkbenchWindows()[0];
}
-} \ No newline at end of file
+}
diff --git a/org.tizen.common/src/org/tizen/common/cache/ColorCache.java b/org.tizen.common/src/org/tizen/common/util/cache/ColorCache.java
index fbd1a3659..3704dc5ec 100644
--- a/org.tizen.common/src/org/tizen/common/cache/ColorCache.java
+++ b/org.tizen.common/src/org/tizen/common/util/cache/ColorCache.java
@@ -23,15 +23,15 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.cache;
+package org.tizen.common.util.cache;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Widget;
+import org.tizen.common.util.SWTUtil;
/**
* Class for caching colors
@@ -41,33 +41,20 @@ import org.eclipse.swt.widgets.Display;
*/
public final class ColorCache {
- public static final RGB BLACK = new RGB(0, 0, 0);
- public static final RGB WHITE = new RGB(255, 255, 255);
+ public static final RGB BLACK = new RGB(0, 0, 0);
+ public static final RGB WHITE = new RGB(255, 255, 255);
- private static Map<RGB, Color> _colorTable;
- private static ColorCache _instance;
-
- static {
- _colorTable = new HashMap<RGB, Color>();
- new ColorCache();
- }
+ private static Map<RGB, Color> _colorTable = new HashMap<RGB, Color>();
private ColorCache() {
- _instance = this;
- }
-
- public static ColorCache getInstance() {
- return _instance;
}
/**
* Disposes of all colors. DO ONLY CALL THIS WHEN YOU ARE SHUTTING DOWN YOUR
* APPLICATION!
*/
- public static void disposeColors() {
- Iterator<Color> e = _colorTable.values().iterator();
- while (e.hasNext())
- e.next().dispose();
+ synchronized public static void disposeColors() {
+ SWTUtil.tryDispose( _colorTable.values().toArray( new Widget[0]) );
_colorTable.clear();
}
@@ -80,27 +67,27 @@ public final class ColorCache {
return getColorFromRGB(new RGB(0, 0, 0));
}
- public static Color getColorFromRGB(RGB rgb) {
+ synchronized public static Color getColorFromRGB(RGB rgb) {
Color color = _colorTable.get(rgb);
if (color == null) {
- color = new Color(Display.getCurrent(), rgb);
+ color = new Color( SWTUtil.getDisplay(), rgb);
_colorTable.put(rgb, color);
}
return color;
}
- public static Color getColor(int r, int g, int b) {
+ synchronized public static Color getColor(int r, int g, int b) {
RGB rgb = new RGB(r, g, b);
Color color = _colorTable.get(rgb);
if (color == null) {
- color = new Color(Display.getCurrent(), rgb);
+ color = new Color( SWTUtil.getDisplay(), rgb);
_colorTable.put(rgb, color);
}
return color;
}
-
-} \ No newline at end of file
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/cache/FontCache.java b/org.tizen.common/src/org/tizen/common/util/cache/FontCache.java
index ec5b81a51..5a83a7700 100644..100755
--- a/org.tizen.common/src/org/tizen/common/cache/FontCache.java
+++ b/org.tizen.common/src/org/tizen/common/util/cache/FontCache.java
@@ -23,14 +23,17 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.cache;
+package org.tizen.common.util.cache;
+
+import static org.tizen.common.util.SWTUtil.tryDispose;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Widget;
+import org.tizen.common.util.SWTUtil;
/**
* Caching class for fonts. Also deals with re-creating fonts should they have been disposed when the
@@ -47,12 +50,8 @@ public class FontCache {
* Disposes all fonts and clears out the cache. Never call this unless you are shutting down your
* code/client/etc.
*/
- public static void disposeAll() {
- for (OneFont of : _existing) {
- if (of.getFont() != null && !of.getFont().isDisposed()) {
- of.getFont().dispose();
- }
- }
+ synchronized public static void disposeAll() {
+ SWTUtil.tryDispose( _existing.toArray( new Widget[0] ) );
_existing.clear();
}
@@ -63,7 +62,7 @@ public class FontCache {
* @param fd FontData
* @return Font or null on error
*/
- public static Font getFont(FontData fd) {
+ synchronized public static Font getFont(FontData fd) {
try {
boolean disposed = false;
OneFont toRemove = null;
@@ -92,7 +91,7 @@ public class FontCache {
return null;
}
- public static int getCount() {
+ synchronized public static int getCount() {
return _existing.size();
}
@@ -104,7 +103,10 @@ public class FontCache {
*/
public static Font getFont(Font font) {
try {
- if (font == null || font.isDisposed()) return null;
+ if (font == null || font.isDisposed())
+ {
+ return null;
+ }
FontData fd = font.getFontData()[0];
return getFont(fd);
@@ -124,7 +126,7 @@ public class FontCache {
* @param style Style of font
* @return Font or null on error
*/
- public static Font getFont(String fontName, int height, int style) {
+ synchronized public static Font getFont(String fontName, int height, int style) {
try {
boolean disposed = false;
OneFont toRemove = null;
@@ -165,14 +167,14 @@ class OneFont {
_name = name;
_height = height;
_style = style;
- _font = new Font(Display.getDefault(), name, height, style);
+ _font = new Font( SWTUtil.getDisplay(), name, height, style);
}
public OneFont(FontData fd) {
_name = fd.getName();
_height = fd.getHeight();
_style = fd.getStyle();
- _font = new Font(Display.getDefault(), fd);
+ _font = new Font( SWTUtil.getDisplay(), fd);
}
public String getName() {
diff --git a/org.tizen.common/src/org/tizen/common/util/cache/ImageCache.java b/org.tizen.common/src/org/tizen/common/util/cache/ImageCache.java
new file mode 100644
index 000000000..778991931
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/cache/ImageCache.java
@@ -0,0 +1,108 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Changhyun Lee <changhyun1.lee@samsung.com>
+ * Kangho Kim <kh5325.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.cache;
+
+import java.io.InputStream;
+import java.util.HashMap;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Widget;
+import org.tizen.common.util.IOUtil;
+import org.tizen.common.util.SWTUtil;
+
+/**
+ * Class for caching images
+ *
+ * @author Emil
+ */
+public class ImageCache {
+
+ // what path to get to the "icons" directory without actually including it
+ private static final String ICON_ROOT_PATH = "icons/";
+
+ private final static HashMap<String, Image> _ImageMap = new HashMap<String, Image>();
+
+ /**
+ * Returns an image that is also cached if it has to be created and does not already exist in the cache.
+ *
+ * @param fileName Filename of image to fetch
+ * @return Image null if it could not be found
+ */
+ public static Image getImage(String fileName) {
+ fileName = ICON_ROOT_PATH + fileName;
+ Image image = _ImageMap.get(fileName);
+ if (image == null) {
+ image = createImage(fileName);
+ _ImageMap.put(fileName, image);
+ }
+ return image;
+ }
+
+ /**
+ * creates the image, and tries really hard to do so
+ *
+ * FIXME : substring is not exact expression to remove leading '/'
+ *
+ * @param fileName image file name
+ *
+ * @return loaded <code>Image</code>
+ */
+ synchronized private static Image createImage(String fileName) {
+ ClassLoader classLoader = ImageCache.class.getClassLoader();
+ InputStream is = classLoader.getResourceAsStream(fileName);
+ try
+ {
+ if (is == null) {
+ // the old way didn't have leading slash, so if we can't find the image stream,
+ // let's see if the old way works.
+ is = classLoader.getResourceAsStream(fileName.substring(1));
+ }
+ if (is == null) {
+ is = classLoader.getResourceAsStream(fileName);
+ if (is == null) {
+ is = classLoader.getResourceAsStream(fileName.substring(1));
+ if (is == null) { return null; }
+ }
+ }
+
+ return new Image( SWTUtil.getDisplay(), is);
+ }
+ finally
+ {
+ IOUtil.tryClose( is );
+ }
+ }
+
+ /**
+ * Disposes ALL images that have been cached.
+ */
+ synchronized public static void dispose() {
+
+ SWTUtil.tryDispose( _ImageMap.values().toArray( new Widget[0]) );
+ _ImageMap.clear();
+
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/manager/ColorCache.java b/org.tizen.common/src/org/tizen/common/util/cache/NamedColorCache.java
index 3920db1d1..08203df15 100644
--- a/org.tizen.common/src/org/tizen/common/manager/ColorCache.java
+++ b/org.tizen.common/src/org/tizen/common/util/cache/NamedColorCache.java
@@ -22,19 +22,19 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.manager;
+package org.tizen.common.util.cache;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Display;
+import org.tizen.common.util.Assert;
+import org.tizen.common.util.SWTUtil;
-public class ColorCache {
+public class NamedColorCache {
private String[] keys;
private Color[] colors;
- public ColorCache(String[] keys){
- if(keys==null||keys.length==0)
- throw new IllegalArgumentException(Messages.ColorCache_0);
+ public NamedColorCache(String[] keys){
+ Assert.notEmpty( keys, "Argument must not be null" );
this.keys = keys;
this.colors = new Color[keys.length];
@@ -71,7 +71,7 @@ public class ColorCache {
color=null;
}
- colors[index] = new Color(Display.getCurrent(),rgb);
+ colors[index] = new Color( SWTUtil.getDisplay(), rgb );
}
public void dispose(){
diff --git a/org.tizen.common/src/org/tizen/common/util/io/Buffer.java b/org.tizen.common/src/org/tizen/common/util/io/Buffer.java
new file mode 100644
index 000000000..888d346c7
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/io/Buffer.java
@@ -0,0 +1,504 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.io;
+
+import java.io.Closeable;
+import java.io.EOFException;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.LinkedList;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * Buffer.
+ *
+ * Buffer for high performance input / output
+ *
+ * No synchronized and no retention
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+Buffer
+implements Closeable
+{
+
+ /**
+ * Logger for this instance
+ */
+ protected Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Pool for {@link ByteBuffer}
+ * @see BufferPool
+ */
+ protected BufferPool pool;
+
+ /**
+ * Used buffers
+ */
+ protected LinkedList<ByteBuffer> useds = new LinkedList<ByteBuffer>();
+
+ /**
+ * in-using read buffer
+ */
+ protected ByteBuffer readBuffer;
+
+ /**
+ * in-using write buffer
+ */
+ protected ByteBuffer writeBuffer;
+
+
+ /**
+ * in-using buffer
+ */
+ protected LinkedList<ByteBuffer> usings = new LinkedList<ByteBuffer>();
+
+ /**
+ * bytes to be read
+ */
+ protected int nReaded = 0;
+
+ /**
+ * total buffer size
+ */
+ protected int size = 0;
+
+ /**
+ * buffer index
+ */
+ protected int index;
+
+ /**
+ * Constructor with {@link BufferPool}
+ *
+ * @param pool {@link BufferPool}
+ */
+ public
+ Buffer(
+ final BufferPool pool
+ )
+ {
+ this.pool = pool;
+ }
+
+ /**
+ * <p>
+ * Return contents' size in buffer
+ * </p>
+ *
+ * @return contents' size
+ */
+ public
+ int
+ size()
+ {
+ return this.size;
+ }
+
+ /**
+ * <p>
+ * Return the number of buffer
+ * </p>
+ * @return the number of {@link ByteBuffer}
+ */
+ public
+ int
+ getBufferSize()
+ {
+ return useds.size() + usings.size() + ( ( null == readBuffer )?0:1 ) + ( ( null == writeBuffer )?0:1 );
+ }
+
+ /**
+ * Return in-using {@link ByteBuffer} for writing
+ *
+ * @return in-using buffer
+ *
+ * @throws IOException When new buffer can't be created
+ */
+ public
+ ByteBuffer
+ getBufferForWrite()
+ throws IOException
+ {
+ if ( null == writeBuffer )
+ {
+ writeBuffer = pool.borrow();
+ }
+ else if ( writeBuffer.remaining() <= 0 )
+ {
+ writeBuffer.flip();
+ usings.addLast( writeBuffer );
+ writeBuffer = pool.borrow();
+ }
+
+ return writeBuffer;
+ }
+
+ /**
+ * Return in-using {@link ByteBuffer} for reading
+ *
+ * @return in-using buffer
+ *
+ * @throws IOException reserved
+ */
+ public
+ ByteBuffer
+ getBufferForRead()
+ throws IOException
+ {
+ if ( null != readBuffer && 0 == readBuffer.remaining() )
+ {
+ readBuffer.position( 0 );
+ useds.add( readBuffer );
+ readBuffer = null;
+ }
+
+ if ( null == readBuffer )
+ {
+ if ( usings.isEmpty() )
+ {
+ if ( null != writeBuffer )
+ {
+ readBuffer = writeBuffer;
+ readBuffer.flip();
+ writeBuffer = null;
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else
+ {
+ readBuffer = usings.removeFirst();
+ }
+ }
+
+ return readBuffer;
+ }
+
+ /**
+ * Read bytes from <code>channel</code>
+ *
+ * @param channel {@link SocketChannel}
+ *
+ * @return the number character to read
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ int
+ readFrom(
+ final SocketChannel channel
+ )
+ throws IOException
+ {
+ int sum = 0;
+ int nCnt = 0;
+ while ( true )
+ {
+ final ByteBuffer buffer = getBufferForWrite();
+ int nRead = channel.read( buffer );
+ if ( nRead < 0 )
+ {
+ throw new EOFException();
+ }
+ else if ( 0 == nRead )
+ {
+ this.size += sum;
+ if ( 0 < sum )
+ {
+ logger.info( "{} bytes[{}] read from {}", new Object[] { sum, nCnt, channel } );
+ }
+ return sum;
+ }
+ sum += nRead;
+ ++nCnt;
+ }
+ }
+
+
+ /**
+ * Write all contents to <code>channel</code>
+ *
+ * @param channel {@link SocketChannel}
+ *
+ * @return the number of bytes to write
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ int
+ writeTo(
+ final SocketChannel channel
+ ) throws IOException
+ {
+ int sum = 0;
+
+ while ( 0 < size )
+ {
+ final ByteBuffer buffer = getBufferForRead();
+ final int nWrite = channel.write( buffer );
+ if ( 0 < nWrite )
+ {
+ this.size -= nWrite;
+ sum += nWrite;
+ }
+ }
+
+ nReaded += sum;
+
+ logger.info( "Send {} bytes to {}", sum, channel );
+
+ return sum;
+ }
+
+ /**
+ * Read and return a byte character from buffer
+ *
+ * @return character to read
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ int
+ read()
+ throws IOException
+ {
+ final ByteBuffer buffer = getBufferForRead();
+ if ( null == buffer )
+ {
+ return -1;
+ }
+
+ int ch = (int) ( 0xFF & buffer.get() );
+ --size;
+ ++nReaded;
+
+ return ch;
+ }
+
+ /**
+ * Read integer from buffer
+ *
+ * @return integer to read
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ int
+ readInt() throws IOException
+ {
+ int i1 = read();
+ int i2 = read();
+ int i3 = read();
+ int i4 = read();
+
+ return ( (int) 0xFF & i1 ) << 24 | ( (int) 0xFF & i2 ) << 16 | ( (int) 0xFF & i3 ) << 8 | ( (int) 0xFF & i4 );
+ }
+
+ /**
+ * Write a byte character to buffer
+ *
+ * @param value character to write
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ void
+ write( final int value ) throws IOException
+ {
+ final ByteBuffer buffer = getBufferForWrite();
+ buffer.put( (byte) value );
+ ++size;
+ }
+
+ /**
+ * Write <code>bytes</code> to buffer
+ *
+ * @param bytes contents to write
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ void
+ write( final byte[] bytes ) throws IOException
+ {
+ for ( int i = 0, n = bytes.length ; i < n ; )
+ {
+ final ByteBuffer buffer = getBufferForWrite();
+ final int remaingSize = buffer.remaining();
+ buffer.put( bytes, i, remaingSize );
+ i += remaingSize;
+ }
+ }
+
+ /**
+ * Write integer to buffer
+ *
+ * @param value integer to write
+ *
+ * @throws IOException When buffer is NOT available
+ */
+ public
+ void
+ writeInt(
+ final int value
+ )
+ throws IOException
+ {
+ write( 0xFF & ( value >> 24 ) );
+ write( 0xFF & ( value >> 16 ) );
+ write( 0xFF & ( value >> 8 ) );
+ write( 0xFF & ( value ) );
+ }
+
+ /**
+ * Reset using resource( buffer, index, ...etc )
+ */
+ public
+ void
+ reset()
+ {
+ if ( null != readBuffer )
+ {
+ readBuffer.position();
+ useds.add( readBuffer );
+ }
+
+ useds.addAll( usings );
+
+ if ( null != writeBuffer )
+ {
+ writeBuffer.flip();
+ useds.add( writeBuffer );
+ writeBuffer = null;
+ }
+
+ usings = useds;
+ useds = new LinkedList<ByteBuffer>();
+ size += nReaded;
+ nReaded = 0;
+ }
+
+ /**
+ * Pack unused resource
+ *
+ * @throws IOException When {@link ByteBuffer} can't be release
+ */
+ synchronized public
+ void
+ pack() throws IOException
+ {
+ for ( final ByteBuffer buffer : useds )
+ {
+ nReaded -= buffer.remaining();
+ pool.release( buffer );
+ }
+
+ useds.clear();
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Closeable#close()
+ */
+ synchronized public
+ void
+ close()
+ throws IOException
+ {
+ if ( null != readBuffer )
+ {
+ pool.release( readBuffer );
+ readBuffer = null;
+ }
+ for ( final ByteBuffer buffer : usings )
+ {
+ pool.release( buffer );
+ }
+ usings.clear();
+ if ( null != writeBuffer )
+ {
+ pool.release( writeBuffer );
+ writeBuffer = null;
+ }
+
+ for ( final ByteBuffer buffer : useds )
+ {
+ pool.release( buffer );
+ }
+
+ useds.clear();
+ }
+
+ /**
+ * Concatencate buffers
+ *
+ * @param buffers {@link Buffer}s to concatenate
+ *
+ * @return {@link Buffer} to be concatenate
+ */
+ public static
+ Buffer
+ concatenate(
+ final Buffer... buffers
+ )
+ {
+ final Buffer ret = new Buffer( null );
+ boolean bInit = false;
+ for ( final Buffer buffer : buffers )
+ {
+ if ( bInit && ret.pool != buffer.pool )
+ {
+ throw new IllegalArgumentException( "Unmatching buffer pool" );
+ }
+ ret.pool = buffer.pool;
+ bInit = true;
+
+ buffer.reset();
+ ret.usings.addAll( buffer.usings );
+ ret.size += buffer.size;
+ }
+
+ return ret;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Buffer[" + size + "]";
+ }
+}
+
diff --git a/org.tizen.common/src/org/tizen/common/util/io/BufferInputStream.java b/org.tizen.common/src/org/tizen/common/util/io/BufferInputStream.java
new file mode 100644
index 000000000..32608a9a6
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/io/BufferInputStream.java
@@ -0,0 +1,81 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+
+/**
+ * <p>
+ * BufferInputStream.
+ *
+ * {@link InputStream} to use {@link Buffer}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Buffer
+ */
+public class
+BufferInputStream
+extends InputStream
+{
+ /**
+ * buffer to store bytes
+ */
+ protected final Buffer buffer;
+
+ /**
+ * Constructor with buffer
+ *
+ * @param buffer {@link ByteBuffer}
+ */
+ public
+ BufferInputStream(
+ final Buffer buffer
+ )
+ {
+ if ( null == buffer )
+ {
+ throw new NullPointerException();
+ }
+
+ this.buffer = buffer;
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.InputStream#read()
+ */
+ @Override
+ public
+ int
+ read()
+ throws IOException
+ {
+ return buffer.read();
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/io/BufferOutputStream.java b/org.tizen.common/src/org/tizen/common/util/io/BufferOutputStream.java
new file mode 100644
index 000000000..3a4a195ae
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/io/BufferOutputStream.java
@@ -0,0 +1,94 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.io;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+
+/**
+ * <p>
+ * BufferOutputStream.
+ *
+ * {@link OutputStream} to use {@link Buffer}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Buffer
+ */
+public class
+BufferOutputStream
+extends OutputStream
+{
+ /**
+ * buffer to store bytes
+ */
+ protected Buffer buffer;
+
+ /**
+ * Constructor with buffer
+ *
+ * @param buffer {@link ByteBuffer}
+ */
+ public
+ BufferOutputStream(
+ final Buffer buffer
+ )
+ {
+ if ( null == buffer )
+ {
+ throw new NullPointerException();
+ }
+ this.buffer = buffer;
+ }
+
+ /**
+ * Return internal buffer
+ *
+ * @return {@link Buffer}
+ */
+ public
+ Buffer
+ getBuffer()
+ {
+ return this.buffer;
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.OutputStream#write(int)
+ */
+ @Override
+ public
+ void
+ write(
+ final int b
+ )
+ throws IOException
+ {
+ buffer.write( b );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/io/BufferPool.java b/org.tizen.common/src/org/tizen/common/util/io/BufferPool.java
new file mode 100644
index 000000000..ee6d938b7
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/io/BufferPool.java
@@ -0,0 +1,248 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.io;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.LinkedList;
+
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.pool.BasePoolableObjectFactory;
+import org.apache.commons.pool.ObjectPool;
+import org.apache.commons.pool.impl.GenericObjectPoolFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * BufferPool.
+ *
+ * Pool for {@link Buffer}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ */
+public class
+BufferPool
+implements Closeable
+{
+
+ /**
+ * The default number of buffer fragments
+ */
+ protected static final int N_CREATION = 1024;
+
+ /**
+ * Buffer fragment's default size
+ */
+ protected static final int BUFFER_SIZE = 256;
+
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * The number of buffer fragements to create
+ */
+ protected int nCreation = N_CREATION;
+
+ /**
+ * Buffer fragement's size
+ */
+ protected int bufferSize = BUFFER_SIZE;
+
+ /**
+ * Set the number of fragment
+ *
+ * @param nCreation the number of fragment
+ */
+ public
+ void
+ setNumberOfFragments(
+ final int nCreation
+ )
+ {
+ this.nCreation = nCreation;
+ }
+
+ /**
+ * Set buffer fragment's size
+ * @param bufferSize buffer fargement's size
+ */
+ public
+ void
+ setSizeOfFragment(
+ final int bufferSize
+ )
+ {
+ this.bufferSize = bufferSize;
+ }
+
+ /**
+ * Pool for {@link ByteBuffer}
+ */
+ protected final ObjectPool<ByteBuffer> bufferPool =
+ new GenericObjectPoolFactory<ByteBuffer>( new BasePoolableObjectFactory<ByteBuffer>() {
+
+ protected final LinkedList<ByteBuffer> buffers = new LinkedList<ByteBuffer>();
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.pool.BasePoolableObjectFactory#makeObject()
+ */
+ @Override
+ public
+ ByteBuffer
+ makeObject()
+ throws Exception
+ {
+ logger.trace( "{} buffer(s) exist", buffers.size() );
+ if ( !buffers.isEmpty() )
+ {
+ return buffers.removeFirst();
+ }
+
+ final long startTime = System.currentTimeMillis();
+ final int totalSize = nCreation * bufferSize;
+
+ final ByteBuffer totalBuffer = ByteBuffer.allocateDirect( totalSize );
+
+ for ( int limit = bufferSize ; limit <= totalSize ; limit += bufferSize )
+ {
+ totalBuffer.limit( limit );
+ buffers.add( totalBuffer.slice() );
+ totalBuffer.position( limit );
+ }
+
+ final long endTime = System.currentTimeMillis();
+ logger.info( "Buffer creation time :{} ms", ( endTime - startTime ) );
+
+ return buffers.removeFirst();
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.pool.BasePoolableObjectFactory#activateObject(java.lang.Object)
+ */
+ public
+ void
+ activateObject(
+ final ByteBuffer buffer
+ )
+ throws Exception
+ {
+ super.activateObject( buffer );
+
+ buffer.clear();
+ }
+
+ }, -1 ).createPool();
+
+ /**
+ * Pick-up and return {@link ByteBuffer} from pool
+ *
+ * @return {@link ByteBuffer}
+ *
+ * @throws IOException When {@link ByteBuffer} can't be created or available
+ */
+ public
+ ByteBuffer
+ borrow()
+ throws IOException
+ {
+ try
+ {
+ return bufferPool.borrowObject();
+ }
+ catch (
+ final Exception e
+ )
+ {
+ throw new IOException( e );
+ }
+ }
+
+ /**
+ * Release buffer to pool
+ *
+ * @param buffer {@link ByteBuffer} to release
+ *
+ * @throws IOException When {@link ByteBuffer} can't be release
+ */
+ public
+ void
+ release(
+ final ByteBuffer buffer
+ ) throws IOException
+ {
+ try
+ {
+ bufferPool.returnObject( buffer );
+ }
+ catch
+ (
+ final Exception e
+ )
+ {
+ throw new IOException( e );
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Closeable#close()
+ */
+ @Override
+ public
+ void
+ close()
+ throws IOException
+ {
+
+ try {
+ bufferPool.close();
+ } catch (
+ final Exception e
+ )
+ {
+ throw new IOException( e );
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public
+ String
+ toString()
+ {
+ return ObjectUtils.toString( this );
+ }
+
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/log/Logger.java b/org.tizen.common/src/org/tizen/common/util/log/Logger.java
index 6f09f7824..59d172173 100644
--- a/org.tizen.common/src/org/tizen/common/log/Logger.java
+++ b/org.tizen.common/src/org/tizen/common/util/log/Logger.java
@@ -23,7 +23,7 @@
*
*/
-package org.tizen.common.log;
+package org.tizen.common.util.log;
import java.text.MessageFormat;
@@ -31,7 +31,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.tizen.common.CommonPlugin;
-import org.tizen.common.console.ConsoleManager;
+import org.tizen.common.ui.view.console.ConsoleManager;
/**
@@ -74,6 +74,11 @@ public class Logger {
log(new Status(IStatus.ERROR, getCallerName(), e.toString(), e));
}
}
+
+ public static void debug( String message, Object... arguments )
+ {
+
+ }
public static void info(String message, Object... arguments) {
log(new Status(Status.INFO, getCallerName(), getPossiblyFormattedString(message, arguments)));
diff --git a/org.tizen.common/src/org/tizen/common/util/url/classpath/Connection.java b/org.tizen.common/src/org/tizen/common/util/url/classpath/Connection.java
new file mode 100644
index 000000000..55b015f8b
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/url/classpath/Connection.java
@@ -0,0 +1,181 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.classpath;
+
+import static org.tizen.common.util.StringUtil.removeLastSegment;
+import static org.tizen.common.util.StringUtil.trimLeadingCharacter;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.util.Assert;
+
+/**
+ * Connection.
+ *
+ * {@link URLConnection} for classpath url
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+Connection
+extends URLConnection
+{
+
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ protected String fqcn;
+
+ protected URL internalUrl = null;
+
+ /**
+ * <p>
+ * Constructor with classpath url
+ * </p>
+ *
+ * @param url url for resouce in classpath
+ */
+ protected Connection( final URL url, final String fqcn )
+ {
+ super( url );
+
+ this.fqcn = fqcn;
+ logger.debug( "Fully qualified class name :{}", fqcn );
+ }
+
+ /* (non-Javadoc)
+ * @see java.net.URLConnection#connect()
+ */
+ @Override
+ public
+ void
+ connect()
+ throws IOException
+ {
+ Assert.isNull( this.internalUrl );
+
+ final String path = trimLeadingCharacter( getURL().getPath(), '/' );
+
+ final Collection<ClassLoader> classLoaders = getClassLoaders();
+ logger.trace( "Classloaders :{}", classLoaders );
+
+ for ( final ClassLoader cl : classLoaders )
+ {
+ URL url = cl.getResource( path );
+ logger.trace( "Check url for {} :{}", path, url );
+ if ( null == url )
+ {
+ continue;
+ }
+
+ this.internalUrl = url;
+ connected = true;
+ return ;
+ }
+
+ if ( null == fqcn )
+ {
+ connected = true;
+ return ;
+ }
+
+ final String packageName = removeLastSegment( fqcn, "." );
+ final String fullPath = trimLeadingCharacter( packageName.replace( '.', '/' ), '/' ) + "/" + path;
+ logger.trace( "Package name :{}, Full path :{}", packageName, fullPath );
+
+ for ( final ClassLoader cl : classLoaders )
+ {
+ URL url = cl.getResource( fullPath );
+ logger.trace( "Check url for {} :{}", fullPath, url );
+ if ( null == url )
+ {
+ continue;
+ }
+
+ this.internalUrl = url;
+ connected = true;
+ return ;
+ }
+
+ }
+
+ /**
+ * <p>
+ * Return classloaders to provide resource<br>
+ *
+ * ClassLoader is following
+ * <ul>
+ * <li>Context ClassLoader</li>
+ * <li>ClassLoader for this class</li>
+ * <li>SystemClassLoader</li>
+ * </ul>
+ * </p>
+ *
+ * @return {@link ClassLoader} candidate
+ */
+ protected static Collection<ClassLoader> getClassLoaders()
+ {
+ final LinkedHashSet<ClassLoader> classLoaders = new LinkedHashSet<ClassLoader>();
+
+ if ( null != Thread.currentThread().getContextClassLoader() )
+ {
+ classLoaders.add( Thread.currentThread().getContextClassLoader() );
+ }
+
+ classLoaders.add( Connection.class.getClassLoader() );
+ classLoaders.add( ClassLoader.getSystemClassLoader() );
+
+ return classLoaders;
+ }
+
+ /* (non-Javadoc)
+ * @see java.net.URLConnection#getInputStream()
+ */
+ @Override
+ public
+ InputStream
+ getInputStream()
+ throws IOException
+ {
+ if ( !connected )
+ {
+ connect();
+ }
+ if ( null == this.internalUrl )
+ {
+ throw new IOException( "resource not found" );
+ }
+ logger.trace( "Open stream :{}", internalUrl );
+
+ return internalUrl.openStream();
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/url/classpath/Handler.java b/org.tizen.common/src/org/tizen/common/util/url/classpath/Handler.java
new file mode 100644
index 000000000..b87d5aee7
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/url/classpath/Handler.java
@@ -0,0 +1,104 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.classpath;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.util.ObjectUtil;
+
+/**
+ * Handler.
+ *
+ * {@link URLStreamHandler} for classpath url
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+Handler
+extends URLStreamHandler
+{
+
+
+ /**
+ * Logger of object
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Full qualified class name of caller( exactly caller that call new URL() )
+ */
+ protected final String fqcnOfCaller;
+
+ public Handler()
+ {
+ fqcnOfCaller = pickupCaller();
+ }
+
+ protected String pickupCaller()
+ {
+ final StackTraceElement[] callStacks = new Exception().getStackTrace();
+
+ boolean bUrl = false;
+
+ for ( final StackTraceElement element : callStacks )
+ {
+ logger.trace( "Check stack :{}", element );
+ final String className = element.getClassName();
+ logger.trace( "Class :{}", className );
+
+ if ( ObjectUtil.equals( className, URL.class.getName() ) )
+ {
+ bUrl = true;
+ }
+ else if ( bUrl )
+ {
+ return className;
+ }
+ }
+
+ return null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see java.net.URLStreamHandler#openConnection(java.net.URL)
+ */
+ @Override
+ protected
+ URLConnection
+ openConnection(
+ final URL u
+ )
+ throws IOException
+ {
+ return new Connection( u, fqcnOfCaller );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/url/cp/Connection.java b/org.tizen.common/src/org/tizen/common/util/url/cp/Connection.java
new file mode 100644
index 000000000..7c13ac232
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/url/cp/Connection.java
@@ -0,0 +1,54 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.cp;
+
+import java.net.URL;
+import java.net.URLConnection;
+
+/**
+ * Connection.
+ *
+ * {@link URLConnection} for classpath url
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see org.tizen.common.util.url.classpath.Connection
+ */
+public class
+Connection
+extends org.tizen.common.util.url.classpath.Connection
+{
+
+ /**
+ * Constructor with url
+ *
+ * @param url {@link URL}
+ */
+ protected Connection( final URL url, final String fqcn )
+ {
+ super( url, fqcn );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/url/cp/Handler.java b/org.tizen.common/src/org/tizen/common/util/url/cp/Handler.java
new file mode 100644
index 000000000..d2f9686b9
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/url/cp/Handler.java
@@ -0,0 +1,60 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.cp;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+/**
+ * Handler.
+ *
+ * {@link URLStreamHandler} for classpath url
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see org.tizen.common.util.url.classpath.Handler
+ */
+public class
+Handler
+extends org.tizen.common.util.url.classpath.Handler
+{
+
+ /* (non-Javadoc)
+ * @see java.net.URLStreamHandler#openConnection(java.net.URL)
+ */
+ @Override
+ protected
+ URLConnection
+ openConnection(
+ final URL u
+ )
+ throws IOException
+ {
+ return new Connection( u, fqcnOfCaller );
+ }
+
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/url/vf/Connection.java b/org.tizen.common/src/org/tizen/common/util/url/vf/Connection.java
new file mode 100644
index 000000000..e32f42da2
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/url/vf/Connection.java
@@ -0,0 +1,125 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.vf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.file.VirtualFileHandler;
+
+/**
+ * Connection.
+ *
+ * {@link URLConnection} for {@link VirtualFileHandler}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+Connection
+extends URLConnection
+{
+
+ /**
+ * Virutal file handler to search
+ */
+ protected static VirtualFileHandler vfHandler = new VirtualFileHandler();
+
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Return {@link VirtualFileHandler} to search
+ *
+ * @return {@link #vfHandler}
+ */
+ public static
+ VirtualFileHandler
+ getVirtualFileHandler()
+ {
+ return vfHandler;
+ }
+
+ /**
+ * Set {@link VirtualFileHandler} to search
+ *
+ * @param vfHandler new {@link VirtualFileHandler}
+ */
+ public static
+ void
+ setVirtualFileHandler(
+ final VirtualFileHandler vfHandler
+ )
+ {
+ Connection.vfHandler = vfHandler;
+ }
+
+
+
+
+ /**
+ * Constructor with url
+ *
+ * @param url {@link URL}
+ */
+ protected
+ Connection(
+ final URL url
+ )
+ {
+ super( url );
+ logger.trace( "URL :{}", url );
+ }
+
+ /* (non-Javadoc)
+ * @see java.net.URLConnection#connect()
+ */
+ @Override
+ public
+ void
+ connect()
+ throws IOException
+ {
+ logger.trace( "connect" );
+ }
+
+ /* (non-Javadoc)
+ * @see java.net.URLConnection#getInputStream()
+ */
+ public
+ InputStream
+ getInputStream()
+ throws IOException
+ {
+ final String path = url.getPath();
+ logger.trace( "Path :{}", path );
+ return vfHandler.read( path );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/util/url/vf/Handler.java b/org.tizen.common/src/org/tizen/common/util/url/vf/Handler.java
new file mode 100644
index 000000000..95089ff68
--- /dev/null
+++ b/org.tizen.common/src/org/tizen/common/util/url/vf/Handler.java
@@ -0,0 +1,59 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.vf;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+/**
+ * Handler.
+ *
+ * {@link URLStreamHandler} for classpath url
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see org.tizen.common.util.url.classpath.Handler
+ */
+public class
+Handler
+extends URLStreamHandler
+{
+ /* (non-Javadoc)
+ * @see java.net.URLStreamHandler#openConnection(java.net.URL)
+ */
+ @Override
+ protected
+ URLConnection
+ openConnection(
+ final URL u
+ )
+ throws IOException
+ {
+ return new Connection( u );
+ }
+
+}
diff --git a/org.tizen.common/test/lib/asm-4.0.jar b/org.tizen.common/test/lib/asm-4.0.jar
new file mode 100644
index 000000000..6d63075eb
--- /dev/null
+++ b/org.tizen.common/test/lib/asm-4.0.jar
Binary files differ
diff --git a/org.tizen.common/test/lib/asm-tree-4.0.jar b/org.tizen.common/test/lib/asm-tree-4.0.jar
new file mode 100644
index 000000000..aa99d3a3c
--- /dev/null
+++ b/org.tizen.common/test/lib/asm-tree-4.0.jar
Binary files differ
diff --git a/org.tizen.common/test/lib/junit-4.10-src.jar b/org.tizen.common/test/lib/junit-4.10-src.jar
new file mode 100644
index 000000000..1449d28b5
--- /dev/null
+++ b/org.tizen.common/test/lib/junit-4.10-src.jar
Binary files differ
diff --git a/org.tizen.common/test/lib/junit-4.10.jar b/org.tizen.common/test/lib/junit-4.10.jar
new file mode 100644
index 000000000..bf5c0b9c6
--- /dev/null
+++ b/org.tizen.common/test/lib/junit-4.10.jar
Binary files differ
diff --git a/org.tizen.common/test/lib/mockito-all-1.9.0.jar b/org.tizen.common/test/lib/mockito-all-1.9.0.jar
new file mode 100644
index 000000000..273fd50fe
--- /dev/null
+++ b/org.tizen.common/test/lib/mockito-all-1.9.0.jar
Binary files differ
diff --git a/org.tizen.common/test/src/log4j.xml b/org.tizen.common/test/src/log4j.xml
new file mode 100755
index 000000000..e5d1893f3
--- /dev/null
+++ b/org.tizen.common/test/src/log4j.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+ <appender name="console" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out" />
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="[%p] %F(%L) - %m%n" />
+ </layout>
+ </appender>
+
+ <root>
+ <priority value="info" />
+ <appender-ref ref="console" />
+ </root>
+</log4j:configuration> \ No newline at end of file
diff --git a/org.tizen.common/test/src/org/tizen/common/AppIdGeneratorTest.java b/org.tizen.common/test/src/org/tizen/common/AppIdGeneratorTest.java
new file mode 100644
index 000000000..3481b7ed4
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/AppIdGeneratorTest.java
@@ -0,0 +1,76 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* ChangHyun Lee <changhyun1.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * AppIdGeneratorTest.
+ *
+ * Test case for {@link AppIdGenerator}
+ *
+ * @author Changhyun Lee{@literal <changhyun1.lee@samsung.com>} (S-Core)
+ *
+ * @see AppIdGenerator
+ *
+ */
+public class AppIdGeneratorTest {
+
+ /**
+ * Test {@link AppIdGenerator#generate()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link AppIdGenerator#generate()}
+ */
+ @Test
+ public void test_generate() throws Exception {
+ AppIdGenerator generator = new AppIdGenerator();
+ String id = generator.generate();
+ String id2 = generator.generate();
+ assertTrue(id.length() == 10);
+ assertTrue(id2.length() == 10);
+ }
+
+ /**
+ * Test {@link AppIdGenerator#generate(int size)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link AppIdGenerator#generate(int size)}
+ */
+ @Test
+ public void test_generate2() throws Exception {
+ AppIdGenerator generator = new AppIdGenerator();
+ String id = generator.generate(10);
+ String id2 = generator.generate(11);
+ assertTrue(id.length() == 10);
+ assertTrue(id2.length() == 11);
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/ClassSource.java b/org.tizen.common/test/src/org/tizen/common/ClassSource.java
new file mode 100644
index 000000000..6e4a9ccc8
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/ClassSource.java
@@ -0,0 +1,53 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * <p>
+ * ClassSource.
+ *
+ * Provide resource in class path
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public interface
+ClassSource
+{
+ /**
+ * Provide {@link InputStream} of resource having <code>path</code> besed on classpath
+ *
+ * @param path relative path based on classpath
+ *
+ * @return {@link InputStream}
+ *
+ * @throws IOException If resource can't be accessible
+ */
+ InputStream getResource( String path ) throws IOException;
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/CommonPluginTest.java b/org.tizen.common/test/src/org/tizen/common/CommonPluginTest.java
new file mode 100644
index 000000000..4082bfa42
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/CommonPluginTest.java
@@ -0,0 +1,80 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common;
+
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.tizen.common.FrequentlyUsedMatcher.doNotCare;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.junit.Test;
+import org.tizen.common.core.application.InstallPathConfig;
+import org.tizen.common.ui.page.preference.TizenBasePreferencePage;
+
+
+
+/**
+ * CommonPluginTest
+ *
+ * Test case for {@link CommonPlugin}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see CommonPlugin
+ */
+public class
+CommonPluginTest
+{
+ /**
+ * Test {@link CommonPlugin#initializeDefaultPreferences(IPreferenceStore)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CommonPlugin#initializeDefaultPreferences(IPreferenceStore)
+ */
+ @Test
+ public void test_initializeDefaultPreferences() throws Exception
+ {
+ final CommonPlugin plugin = new CommonPlugin();
+ final IPreferenceStore preferenceStore = mock( IPreferenceStore.class );
+
+ plugin.initializeDefaultPreferences( preferenceStore );
+
+ /*
+ * LookAtMe : Test with No argument specification
+ */
+ if ( null != InstallPathConfig.getSDKPath() )
+ {
+ // in case of non-installed env.
+ verify( preferenceStore ).setDefault(
+ eq( TizenBasePreferencePage.KEY_SDKLOCATION ),
+ (String) doNotCare()
+ );
+ }
+ verify( preferenceStore ).setDefault( TizenBasePreferencePage.KEY_SDKUPDATE, true );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/DirectorySource.java b/org.tizen.common/test/src/org/tizen/common/DirectorySource.java
new file mode 100644
index 000000000..172d9cc7c
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/DirectorySource.java
@@ -0,0 +1,85 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * <p>
+ * DirectorySource.
+ *
+ * Directory base {@link ClassSource}
+ *
+ * Provide *.class file as {@link InputStream}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+DirectorySource
+implements ClassSource
+{
+ /**
+ * Root directory
+ */
+ protected final File root;
+
+ /**
+ * Constructor with base directory path
+ *
+ * @param root directory path
+ */
+ public
+ DirectorySource(
+ final String root
+ )
+ {
+ this.root = new File( root );
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.ClassSource#getResource(java.lang.String)
+ */
+ @Override
+ public
+ InputStream
+ getResource(
+ final String path
+ )
+ throws IOException
+ {
+ final File file = new File( root, path );
+
+ if ( file.exists() && file.canRead() )
+ {
+ return new FileInputStream( file );
+ }
+ return null;
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/FrequentlyUsedMatcher.java b/org.tizen.common/test/src/org/tizen/common/FrequentlyUsedMatcher.java
new file mode 100644
index 000000000..01423c6d3
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/FrequentlyUsedMatcher.java
@@ -0,0 +1,70 @@
+package org.tizen.common;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.mockito.Matchers;
+
+public class FrequentlyUsedMatcher
+{
+ public static <T> T doNotCare()
+ {
+ return Matchers.argThat( new BaseMatcher<T>()
+ {
+ public boolean matches( final Object arg )
+ {
+ return true;
+ }
+
+ public void describeTo( final Description desc )
+ {
+ }
+ } );
+ }
+
+ public static <T> T eq( T type )
+ {
+ return Matchers.eq( type );
+ }
+
+
+ public static boolean eq( boolean type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static byte eq( byte type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static char eq( char type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static double eq( double type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static float eq( float type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static int eq( int type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static long eq( long type )
+ {
+ return Matchers.eq( type );
+ }
+
+ public static short eq( short type )
+ {
+ return Matchers.eq( type );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/JarSource.java b/org.tizen.common/test/src/org/tizen/common/JarSource.java
new file mode 100644
index 000000000..60033bdd2
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/JarSource.java
@@ -0,0 +1,103 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+import static org.tizen.common.util.IOUtil.getBytes;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+/**
+ * <p>
+ * JarSource.
+ *
+ * Read jar file and provide class {@link InputStream}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+JarSource
+implements ClassSource
+{
+
+ /**
+ * Jar file path
+ */
+ protected final String path;
+
+ /**
+ * Constructor with jar file path
+ *
+ * @param location jar path
+ */
+ public
+ JarSource(
+ String location
+ )
+ {
+ if ( null == location )
+ {
+ throw new NullPointerException();
+ }
+ this.path = location;
+ }
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.ClassSource#getResource(java.lang.String)
+ */
+ @Override
+ public
+ InputStream
+ getResource(
+ final String path
+ )
+ throws IOException
+ {
+ final JarFile file = new JarFile( new File( this.path ) );
+ final JarEntry entry = file.getJarEntry( path );
+ if ( null == entry )
+ {
+ return null;
+ }
+ InputStream in = null;
+ try
+ {
+ in = file.getInputStream( entry );
+ ByteArrayInputStream byteIn = new ByteArrayInputStream( getBytes( in ) );
+ return byteIn;
+ }
+ finally
+ {
+ tryClose( in );
+ file.close();
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/Location.java b/org.tizen.common/test/src/org/tizen/common/Location.java
new file mode 100644
index 000000000..3a08e95f6
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/Location.java
@@ -0,0 +1,53 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * <p>
+ * Location.
+ *
+ * Annotation for class path
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+@Retention( RetentionPolicy.RUNTIME )
+@Target({java.lang.annotation.ElementType.TYPE})
+@Inherited
+public @interface Location
+{
+ /**
+ * reeturn classpath
+ *
+ * @return classpath
+ */
+ String[] value();
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/TestAgent.java b/org.tizen.common/test/src/org/tizen/common/TestAgent.java
new file mode 100644
index 000000000..f06d4ae6e
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/TestAgent.java
@@ -0,0 +1,17 @@
+package org.tizen.common;
+
+import java.lang.instrument.Instrumentation;
+
+public class
+TestAgent
+{
+ public static void premain(
+ final String name,
+ final Instrumentation inst
+ )
+ {
+ inst.addTransformer( new Transformer() );
+ }
+
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/Transformer.java b/org.tizen.common/test/src/org/tizen/common/Transformer.java
new file mode 100644
index 000000000..bbdefa3c7
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/Transformer.java
@@ -0,0 +1,38 @@
+package org.tizen.common;
+
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.IllegalClassFormatException;
+import java.security.ProtectionDomain;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.ClassNode;
+
+public class
+Transformer
+implements ClassFileTransformer
+{
+ @Override
+ public
+ byte[] transform(
+ final ClassLoader loader,
+ final String className,
+ final Class<?> classBeingRedefined,
+ final ProtectionDomain protectionDomain,
+ final byte[] bytes
+ )
+ throws IllegalClassFormatException
+ {
+ ClassReader reader = new ClassReader( bytes );
+ ClassNode classNode = new ClassNode();
+ reader.accept( classNode, 0 );
+ classNode.access &= (~Opcodes.ACC_FINAL);
+
+ final ClassWriter cw =
+ new ClassWriter( ClassWriter.COMPUTE_MAXS|ClassWriter.COMPUTE_FRAMES );
+ classNode.accept( cw );
+ return cw.toByteArray();
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/UnsafeClassLoader.java b/org.tizen.common/test/src/org/tizen/common/UnsafeClassLoader.java
new file mode 100644
index 000000000..dcf8d337f
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/UnsafeClassLoader.java
@@ -0,0 +1,255 @@
+/*
+ *
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+import static org.tizen.common.util.IOUtil.getBytes;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.IllegalClassFormatException;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.util.IOUtil;
+
+
+/**
+ * <p>
+ * UnsafeClassLoader.
+ *
+ * Classloader for untestable class
+ *
+ * FIXME add {@link Package} info and {@link #getResource(String)}, {@link #getResourceAsStream(String)}, {@link #getResources(String)}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+UnsafeClassLoader
+extends ClassLoader
+{
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Parent classloader
+ */
+ protected final ClassLoader parent;
+
+ protected ClassFileTransformer transformer = new Transformer();
+
+ /**
+ * {@link ClassSource}s providing class contents
+ */
+ protected final ArrayList<ClassSource> sources = new ArrayList<ClassSource>();
+
+ /**
+ * Constructor with {@link ClassSource}s
+ * @param source
+ */
+ public
+ UnsafeClassLoader(
+ final ClassSource... source
+ )
+ {
+ this( null, source );
+ }
+
+ /**
+ * Constructor with parent class loader and class source
+ *
+ * @param parent {@link ClassLoader}
+ * @param sources {@link ClassSource}s
+ */
+ public
+ UnsafeClassLoader(
+ final ClassLoader parent,
+ final ClassSource... sources
+ )
+ {
+ this.parent = parent;
+ this.sources.addAll( Arrays.asList( sources ) );
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
+ */
+ @Override
+ synchronized protected
+ Class<?>
+ loadClass(
+ final String name,
+ final boolean resolve
+ )
+ throws ClassNotFoundException
+ {
+ // First, check if the class has already been loaded
+ Class<?> c = findLoadedClass( name );
+ if ( c == null )
+ {
+ if ( name.startsWith( "java." ) )
+ {
+ return ClassLoader.getSystemClassLoader().loadClass( name );
+ }
+ try
+ {
+ c = findClass( name );
+ } catch (ClassNotFoundException e) {
+ if ( null != parent )
+ {
+ c = parent.loadClass( name );
+ }
+ else
+ {
+ throw new ClassNotFoundException();
+ }
+ }
+ }
+ if ( resolve )
+ {
+ resolveClass( c );
+ }
+ return c;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.ClassLoader#findClass(java.lang.String)
+ */
+ @Override
+ protected
+ Class<?>
+ findClass(
+ final String name
+ )
+ throws ClassNotFoundException
+ {
+ logger.trace( "Class name :{}", name );
+ final String path = name.replace( '.', '/' ) + ".class";
+ for ( final ClassSource source : sources )
+ {
+ logger.trace( "Source :{}", source );
+ InputStream in = null;;
+ try
+ {
+ in = source.getResource( path );
+ final Class<?> clazz = define( name, in );
+ if ( null != clazz )
+ {
+ return clazz;
+ }
+ }
+ catch ( final IOException e )
+ {
+ }
+ finally
+ {
+ tryClose( in );
+ }
+ }
+
+// final ClassLoader loader = getClass().getClassLoader();
+//
+// final InputStream in = loader.getResourceAsStream( path );
+// try
+// {
+// final Class<?> clazz = define( name, in );
+// if ( null != clazz )
+// {
+// return clazz;
+// }
+// }
+// finally
+// {
+// tryClose( in );
+// }
+//
+ throw new ClassNotFoundException();
+
+ }
+
+ protected Class<?> define(
+ final String name,
+ final InputStream in
+ )
+ {
+ try {
+ if ( null == in )
+ {
+ return null;
+ }
+ byte[] bytes = getBytes( in );
+ final String qn = name.replace( '.', '/' );
+ bytes = transformer.transform( this, qn, null, null, bytes );
+ logger.trace( "{} bytes read", bytes.length );
+ return defineClass( name, bytes, 0, bytes.length );
+ } catch ( final IOException e )
+ {
+ } catch ( final IllegalClassFormatException e )
+ {
+ }
+
+ return null;
+ }
+
+ /**
+ * Write log file about converted class
+ *
+ * @param path file path to write
+ * @param bytes class contents
+ *
+ * @throws IOException If file can't be write
+ */
+ protected
+ void
+ writeLog(
+ final String path,
+ byte[] bytes
+ )
+ throws IOException
+ {
+ FileOutputStream fileOut = null;
+ try
+ {
+ File logFile = new File( "test/log/" + path );
+ logFile.getParentFile().mkdirs();
+ fileOut = new FileOutputStream( logFile );
+ IOUtil.redirect( new ByteArrayInputStream( bytes ), fileOut );
+ }
+ finally
+ {
+ tryClose( fileOut);
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/UnsafeRunner.java b/org.tizen.common/test/src/org/tizen/common/UnsafeRunner.java
new file mode 100644
index 000000000..dd17f9ae9
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/UnsafeRunner.java
@@ -0,0 +1,180 @@
+/*
+ *
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.internal.builders.JUnit4Builder;
+import org.junit.runner.Description;
+import org.junit.runner.Runner;
+import org.junit.runner.notification.RunNotifier;
+import org.junit.runners.ParentRunner;
+import org.junit.runners.model.InitializationError;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * <p>
+ * UnsafeRunner.
+ *
+ * JUnit extensible {@link Runner}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+UnsafeRunner
+extends ParentRunner<Runner>
+{
+ /**
+ * Logger for this instance
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+ /**
+ * Classloader to convert test case
+ */
+ protected ClassLoader loader;
+
+ /**
+ * Test case name
+ */
+ protected final String className;
+
+ /**
+ * Constructor with test case {@link Class}
+ *
+ * @param testClass test case {@link Class}
+ *
+ * @throws InitializationError If <code>testClass</code> is invalid test case
+ */
+ public
+ UnsafeRunner(
+ final Class<?> testClass
+ )
+ throws InitializationError
+ {
+ super( testClass );
+ logger.trace( "Class :{}", testClass );
+
+ this.className = testClass.getName();
+
+ ClassSource[] sources = getSources( testClass );
+
+ loader = new UnsafeClassLoader( getClass().getClassLoader(), sources );
+ }
+
+ /**
+ * Extrace {@link ClassSource} from test case's annotation
+ *
+ * @param testClass test case
+ *
+ * @return {@link ClassSource}s
+ */
+ protected
+ ClassSource[] getSources(
+ final Class<?> testClass
+ )
+ {
+ final Location annotation =
+ testClass.getAnnotation( Location.class );
+ if ( null == annotation )
+ {
+ return new ClassSource[0];
+ }
+
+ final String[] locations = annotation.value();
+
+ final ArrayList<ClassSource> sources = new ArrayList<ClassSource>();
+
+ for ( final String location : locations )
+ {
+ if ( location.endsWith( ".jar" ) )
+ {
+ sources.add( new JarSource( location ) );
+ }
+ else if ( location.endsWith( "/" ) )
+ {
+ sources.add( new DirectorySource( location ) );
+ }
+ }
+
+ return sources.toArray( new ClassSource[0] );
+ }
+
+ /* (non-Javadoc)
+ * @see org.junit.runners.ParentRunner#getChildren()
+ */
+ @Override
+ protected
+ List<Runner>
+ getChildren()
+ {
+ final ArrayList<Runner> runners = new ArrayList<Runner>();
+ try {
+ final Class<?> clazz = loader.loadClass( className );
+ logger.trace( "Class :{}, Loader :{}", clazz, clazz.getClassLoader() );
+ final JUnit4Builder builder = new JUnit4Builder();
+ runners.add( builder.runnerForClass( clazz ) );
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+
+ logger.debug( "Runners :{}", runners );
+
+ return runners;
+ }
+
+ /* (non-Javadoc)
+ * @see org.junit.runners.ParentRunner#describeChild(java.lang.Object)
+ */
+ @Override
+ protected
+ Description
+ describeChild(
+ final Runner runner
+ )
+ {
+ return runner.getDescription();
+ }
+
+ /* (non-Javadoc)
+ * @see org.junit.runners.ParentRunner#runChild(java.lang.Object, org.junit.runner.notification.RunNotifier)
+ */
+ @Override
+ protected
+ void
+ runChild(
+ final Runner runner,
+ final RunNotifier notifier
+ )
+ {
+ logger.trace( "Runner :{}", runner );
+ runner.run( notifier );
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/application/MessagesTest.java b/org.tizen.common/test/src/org/tizen/common/core/application/MessagesTest.java
new file mode 100644
index 000000000..85ea2c5e3
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/application/MessagesTest.java
@@ -0,0 +1,58 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.application;
+
+import static org.junit.Assert.assertFalse;
+
+import org.junit.Test;
+import org.tizen.common.util.StringUtil;
+
+
+/**
+ * MessagesTest
+ *
+ * Test case for {@link MessagesTest}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see MessagesTest
+ */
+public class MessagesTest
+{
+
+ /**
+ * Test {@link Messages}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Messages}
+ * @see Messages#DIALOG_TITLE
+ */
+ @Test
+ public void test_Messages() throws Exception
+ {
+ assertFalse( StringUtil.isEmpty( Messages.DIALOG_TITLE ) );
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/application/StatusLineMessageManagerTest.java b/org.tizen.common/test/src/org/tizen/common/core/application/StatusLineMessageManagerTest.java
new file mode 100644
index 000000000..24e33743d
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/application/StatusLineMessageManagerTest.java
@@ -0,0 +1,95 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.application;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.eclipse.jface.action.IStatusLineManager;
+import org.junit.Test;
+
+
+/**
+ * StatusLineMessageManagerTest
+ *
+ * Test case for {@link StatusLineMessageManager}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see StatusLineMessageManager
+ */
+public class StatusLineMessageManagerTest
+{
+ /**
+ * Test {@link StatusLineMessageManager#setMessage(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StatusLineMessageManager#setMessage(String)}
+ */
+ @Test
+ public void test_setMessage() throws Exception
+ {
+ final String[] TEST_CASES = new String[] {
+ null, "Hello", "Test"
+ };
+
+ for ( final String TEST_CASE : TEST_CASES )
+ {
+ final IStatusLineManager statusLineManager = mock( IStatusLineManager.class );
+ final StatusLineMessageManager manager =
+ new StatusLineMessageManager( statusLineManager );
+
+ manager.setMessage( TEST_CASE );
+ verify( statusLineManager ).setMessage( TEST_CASE );
+ }
+ }
+
+ /**
+ * Test {@link StatusLineMessageManager#setErrorMessage(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StatusLineMessageManager#setErrorMessage(String)}
+ */
+ @Test
+ public void test_setErrorMessage() throws Exception
+ {
+ final String[] TEST_CASES = new String[] {
+ null, "Hello", "Test"
+ };
+
+ for ( final String TEST_CASE : TEST_CASES )
+ {
+ final IStatusLineManager statusLineManager = mock( IStatusLineManager.class );
+ final StatusLineMessageManager manager =
+ new StatusLineMessageManager( statusLineManager );
+
+ manager.setErrorMessage( TEST_CASE );
+ verify( statusLineManager ).setErrorMessage( TEST_CASE );
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/CommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/CommandTest.java
new file mode 100755
index 000000000..14d18642e
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/CommandTest.java
@@ -0,0 +1,151 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import org.junit.After;
+import org.junit.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.tizen.common.core.command.policy.PolicyRegistry;
+import org.tizen.common.core.command.prompter.NopPrompter;
+import org.tizen.common.file.VirtualFileHandler;
+
+/**
+ * CommandTest
+ *
+ * Test case for {@link Command}'s sub class
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+CommandTest
+{
+
+ /**
+ * Logger for testcase
+ */
+ protected final Logger logger = LoggerFactory.getLogger( getClass() );
+ /**
+ * {@link ExecutionContext} for test
+ */
+ protected ExecutionContext context;
+
+ /**
+ * {@link Executor} for test
+ */
+ protected Executor executor;
+
+ /**
+ * Return {@link Prompter} for test
+ *
+ * @return {@link Prompter}
+ */
+ protected
+ Prompter
+ getPrompter()
+ {
+ return context.getPrompter();
+ }
+
+ /**
+ * Return {@link PolicyRegistry} for test
+ *
+ * @return {@link PolicyRegistry}
+ */
+ protected
+ PolicyRegistry
+ getPolicies() {
+ return context.getPolicyRegistry();
+ }
+
+ /**
+ * Return {@link VirtualFileHandler} for test
+ *
+ * @return {@link VirtualFileHandler}
+ */
+ protected
+ VirtualFileHandler
+ getFileHandler()
+ {
+ return (VirtualFileHandler) context.getFileHandler();
+ }
+
+ /**
+ * Return {@link Executor} for test
+ *
+ * @return {@link Executor}
+ */
+ protected
+ Executor
+ getExecutor()
+ {
+ return this.executor;
+ }
+
+ /**
+ * Return {@link ExecutionContext} for test
+ *
+ * @return {@link ExecutionContext}
+ */
+ protected
+ ExecutionContext
+ getExecutionContext()
+ {
+ return this.context;
+ }
+
+ /**
+ * Create prompter for test
+ *
+ * @return {@link Prompter}
+ *
+ * @see NopPrompter
+ */
+ protected
+ Prompter
+ createPrompter()
+ {
+ return new NopPrompter();
+ }
+
+ /**
+ * Set up test
+ */
+ @Before
+ public void setUp()
+ {
+ context = new ExecutionContext( new PolicyRegistry(), createPrompter(), new VirtualFileHandler() );
+ }
+
+ /**
+ * Tear down test
+ */
+ @After
+ public void tearDown()
+ {
+ context = null;
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/CompositeCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/CompositeCommandTest.java
new file mode 100644
index 000000000..735763a6e
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/CompositeCommandTest.java
@@ -0,0 +1,104 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.junit.Test;
+
+
+/**
+ * CompositeCommandTest
+ *
+ * Test case for {@link CompositeCommand}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see CompositeCommandTest
+ */
+public class
+CompositeCommandTest
+extends CommandTest
+{
+ /**
+ * Test {@link CompositeCommand#execute(Executor, ExecutionContext)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CompositeCommand#execute(Executor, ExecutionContext)
+ */
+ @Test
+ public
+ void
+ test_execute()
+ throws Exception
+ {
+ final AtomicInteger value = new AtomicInteger( 1 );
+ final AbstractCommand<Object> command1 = new AbstractCommand<Object>()
+ {
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.AbstractCommand#run(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ value.set( value.get() + 1 );
+ }
+ };
+ final AbstractCommand<Object> command2 = new AbstractCommand<Object>()
+ {
+
+ /* (non-Javadoc)
+ * @see org.tizen.common.core.command.AbstractCommand#run(org.tizen.common.core.command.Executor, org.tizen.common.core.command.ExecutionContext)
+ */
+ @Override
+ public
+ void
+ run(
+ final Executor executor,
+ final ExecutionContext context
+ )
+ throws Exception
+ {
+ value.set( value.get() * 3 );
+ }
+ };
+
+ final CompositeCommand commands = new CompositeCommand( command1, command2 );
+ commands.run( getExecutor(), getExecutionContext() );
+
+ assertEquals( 6, value.get() );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/ExecutionContextTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/ExecutionContextTest.java
new file mode 100644
index 000000000..5be95d52f
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/ExecutionContextTest.java
@@ -0,0 +1,100 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.tizen.common.core.command.policy.PolicyRegistry;
+import org.tizen.common.core.command.prompter.NopPrompter;
+import org.tizen.common.file.VirtualFileHandler;
+
+
+/**
+ * ExecutionContextTest
+ *
+ * Test case for {@link ExecutionContext}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see ExecutionContext
+ */
+public class
+ExecutionContextTest
+{
+ /**
+ * Test {@link ExecutionContext#getPolicyRegistry()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ExecutionContext#getPolicyRegistry()
+ */
+ @Test
+ public void test_getPolicyRegistry() throws Exception {
+ // Given
+ final PolicyRegistry registry = new PolicyRegistry();
+ final ExecutionContext context = new ExecutionContext( registry, null, null );
+
+ // When & Then
+ assertEquals( registry, context.getPolicyRegistry() );
+ }
+
+ /**
+ * Test {@link ExecutionContext#getPrompter()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ExecutionContext#getPrompter()
+ */
+ @Test
+ public void test_getPrompter() throws Exception {
+ // Given
+ final NopPrompter prompter = new NopPrompter();
+ final ExecutionContext context = new ExecutionContext( null, prompter, null );
+
+ // When & Then
+ assertEquals( prompter, context.getPrompter() );
+
+ }
+
+ /**
+ * Test {@link ExecutionContext#getFileHandler()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ExecutionContext#getFileHandler()
+ */
+ @Test
+ public void test_getFileHandler() throws Exception {
+ // Given
+ final VirtualFileHandler handler = new VirtualFileHandler();
+ final ExecutionContext context = new ExecutionContext( null, null, handler );
+
+ // When & Then
+ assertEquals( handler, context.getFileHandler() );
+ }
+
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/file/FileHandlingCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/file/FileHandlingCommandTest.java
new file mode 100644
index 000000000..b1bcb6e21
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/file/FileHandlingCommandTest.java
@@ -0,0 +1,103 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.file;
+
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Test;
+import org.mockito.Matchers;
+import org.tizen.common.file.Filter;
+import org.tizen.common.file.SimpleFileFilter;
+
+
+/**
+ * FileHandlingCommandTest.
+ *
+ * Test case for {@link FileHandlingCommand}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see FileHandlingCommand
+ */
+public class
+FileHandlingCommandTest
+{
+
+ /**
+ * Test {@link FileHandlingCommand#setFilter(SimpleFileFilter)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FileHandlingCommand#setFilter(SimpleFileFilter)
+ */
+ @Test
+ public
+ void
+ test_setFilter() throws Exception
+ {
+ // Given
+ final FileHandlingCommand<Object> command = new FileHandlingCommand<Object>();
+
+ // When & Then
+ command.setFilter( new SimpleFileFilter() );
+
+ try
+ {
+ // When
+ command.setFilter( null );
+ fail();
+ }
+ catch ( NullPointerException e )
+ {
+ // Then
+ }
+ }
+
+ /**
+ * Test {@link FileHandlingCommand#setIncludes(String[])}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FileHandlingCommand#setIncludes(String[])
+ */
+ @Test
+ public void test_setIncludes() throws Exception {
+ // Given
+ final FileHandlingCommand<Object> command = new FileHandlingCommand<Object>();
+ SimpleFileFilter mockFilter = mock( SimpleFileFilter.class );
+ command.setFilter( mockFilter );
+
+ // When
+ command.setIncludes( new String[] { "*" } );
+
+ // Then
+ verify( mockFilter ).clearIncludes();
+ verify( mockFilter ).addIncludes( Matchers.<Filter>any() );
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/policy/PolicyRegistryTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/policy/PolicyRegistryTest.java
new file mode 100644
index 000000000..b6f88ea02
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/policy/PolicyRegistryTest.java
@@ -0,0 +1,72 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.policy;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.Test;
+
+
+/**
+ * PolicyRegistryTest
+ *
+ * Test case for {@link PolicyRegistry}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see PolicyRegistry
+ */
+public class PolicyRegistryTest
+{
+
+ /**
+ * Test {@link PolicyRegistry#getPolicy(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see PolicyRegistry#getPolicy(String)
+ */
+ @Test
+ public void test_getPolicy() throws Exception {
+ final PolicyRegistry register = new PolicyRegistry();
+
+ final AbstractPolicy expected = new AbstractPolicy( "exist.output.file" ) {
+ public <T> T adapt(Class<T> clazz) {
+ return null;
+ }
+ };
+
+ register.register( expected );
+
+ assertNotNull( register.getPolicy( null ) );
+ assertNotNull( register.getPolicy( "" ) );
+ assertEquals( null, register.getPolicy( "exist" ) );
+ assertEquals( null, register.getPolicy( "exist.output" ) );
+ assertEquals( expected, register.getPolicy( "exist.output.file.xml" ) );
+ assertEquals( expected, register.getPolicy( "exist.output.file" ) );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/prompter/GenericOptionTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/prompter/GenericOptionTest.java
new file mode 100644
index 000000000..4094c3ef2
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/prompter/GenericOptionTest.java
@@ -0,0 +1,98 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+
+/**
+ * <p>
+ * GenericOptionTest.
+ *
+ * Test case for {@link GenericOption}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see GenericOption
+ */
+public class
+GenericOptionTest
+{
+ /**
+ * Test {@link GenericOption#isMatch(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see GenericOption#isMatch(String)
+ */
+ @Test
+ public
+ void
+ test_isMatch()
+ throws Exception
+ {
+
+ final GenericOption option = new GenericOption();
+
+ assertTrue( option.isMatch( "Hello" ) );
+ assertTrue( option.isMatch( "World" ) );
+
+
+ }
+
+ /**
+ * Test {@link GenericOption#getAnswer()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see GenericOption#getAnswer()
+ */
+ @Test
+ public
+ void
+ test_getAnswer()
+ throws Exception
+ {
+ final String userAnser = "Dummy answer";
+ NopPrompter prompter = new NopPrompter() {
+ @Override
+ public Option interact(String question, Option... options) {
+ options[0].isMatch( userAnser );
+ return options[0];
+ }
+ };
+ GenericOption option = new GenericOption();
+ final Option answer = prompter.interact( "Answer ?", option );
+
+ assertEquals( userAnser, ((GenericOption) answer).getAnswer() );
+ assertEquals( userAnser, answer.toString() );
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/prompter/OptionTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/prompter/OptionTest.java
new file mode 100644
index 000000000..beb2027a1
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/prompter/OptionTest.java
@@ -0,0 +1,91 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+
+/**
+ * OptionTest
+ *
+ * Test case for {@link ChoiceOption}
+ *
+ * @author bylee
+ *
+ * @see ChoiceOption
+ */
+public class
+OptionTest
+{
+ /**
+ * Test {@link ChoiceOption#isMatch(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ChoiceOption#isMatch(String)
+ */
+ @Test
+ public
+ void
+ test_isMatch()
+ throws Exception
+ {
+ // Test cases
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] {
+ new ChoiceOption( "test" ),
+ new Object[][] {
+ new Object[] { "t", true },
+ new Object[] { "TEST", true },
+ new Object[] { "TEst", true },
+ new Object[] { "No", false },
+ new Object[] { null, false }
+ }
+ }
+ };
+ // Given
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+
+ final ChoiceOption option = (ChoiceOption) TEST_CASE[0];
+ final Object[][] TEST_CASE2 = (Object[][]) TEST_CASE[1];
+ for ( final Object[] TEST_CASE3 : TEST_CASE2 )
+ {
+ // When
+ String input = (String) TEST_CASE3[0];
+ boolean expected = (Boolean) TEST_CASE3[1];
+
+ boolean result = option.isMatch( input );
+
+ // Then
+ assertEquals( expected, result );
+ }
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/prompter/SWTPrompterTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/prompter/SWTPrompterTest.java
new file mode 100644
index 000000000..f222f83f2
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/prompter/SWTPrompterTest.java
@@ -0,0 +1,109 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.prompter;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.junit.Test;
+
+
+/**
+ * SWTPrompterTest
+ *
+ * Test case for {@link SWTPrompter}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see SWTPrompter
+ */
+public class
+SWTPrompterTest
+{
+ /**
+ * Test {@link SWTPrompter#interact(String, ChoiceOption...)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see SWTPrompter#interact(String, ChoiceOption...)
+ */
+ @Test
+ public void test_interact() throws Exception {
+ {
+ // Given
+ final MessageDialog mockDialog = mock( MessageDialog.class );
+ when( mockDialog.getReturnCode() ).thenReturn( 0 );
+ final SWTPrompter prompter = new SWTPrompter() {
+ @Override
+ protected Dialog createDialog(
+ final String question,
+ final String[] optionNames,
+ final int defaultOptionIndex
+ )
+ {
+ return mockDialog;
+ }
+ };
+
+ // When
+ ChoiceOption opt1 = new ChoiceOption( "Yes" );
+ ChoiceOption opt2 = new ChoiceOption( "No", true );
+
+ // Then
+ Option result = prompter.interact( "Yes or No", opt1, opt2 );
+ assertEquals( opt1, result );
+ }
+
+ {
+ // Given
+ final MessageDialog mockDialog = mock( MessageDialog.class );
+ when( mockDialog.getReturnCode() ).thenReturn( 1 );
+ final SWTPrompter prompter = new SWTPrompter() {
+ @Override
+ protected Dialog createDialog(
+ final String question,
+ final String[] optionNames,
+ final int defaultOptionIndex
+ )
+ {
+ return mockDialog;
+ }
+ };
+
+ // When
+ ChoiceOption opt1 = new ChoiceOption( "Yes" );
+ ChoiceOption opt2 = new ChoiceOption( "No", true );
+
+ // Then
+ Option result = prompter.interact( "Yes or No", opt1, opt2 );
+ assertEquals( opt2, result );
+
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/sdb/DevicesSdbCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/DevicesSdbCommandTest.java
new file mode 100644
index 000000000..205e8b0dd
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/DevicesSdbCommandTest.java
@@ -0,0 +1,68 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.sdblib.IDevice;
+
+/**
+ * DevicesSdbCommandTest
+ *
+ * Test case for {@link DevicesSdbCommand}
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see DevicesSdbCommand
+ */
+public class
+DevicesSdbCommandTest
+extends CommandTest
+{
+ @Test
+ public void test_execute() throws Exception {
+ DevicesSdbCommand testCommand = new DevicesSdbCommand() {
+ @Override
+ protected SmartDevelopmentBridgeManager createBridge() {
+ SmartDevelopmentBridgeManager mockBridge = mock( SmartDevelopmentBridgeManager.class );
+ IDevice mockDevice1 = mock( IDevice.class );
+ IDevice mockDevice2 = mock( IDevice.class );
+ when( mockDevice1.toString() ).thenReturn( "TizenDevice1" );
+ when( mockDevice2.toString() ).thenReturn( "TizenDevice2" );
+ when( mockBridge.getDevices() ).thenReturn( new IDevice[] { mockDevice1, mockDevice2 } );
+ return mockBridge;
+ }
+
+ };
+ testCommand.run( null, context );
+ String result = "TizenDevice1" + System.getProperty("line.separator") + "TizenDevice2" + System.getProperty("line.separator");
+ assertEquals( result, testCommand.getResult() );
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/sdb/DlogSdbCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/DlogSdbCommandTest.java
new file mode 100644
index 000000000..b8dcbe177
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/DlogSdbCommandTest.java
@@ -0,0 +1,82 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Test;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.MultiLineReceiver;
+
+/**
+ * DlogSdbCommandTest
+ *
+ * Test case for {@link DlogSdbCommand}
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see DlogSdbCommand
+ */
+public class
+DlogSdbCommandTest
+extends CommandTest
+{
+ @Test
+ public void test_execute() throws Exception {
+ final MultiLineReceiver mockMultiLineReceiver = mock( MultiLineReceiver.class );
+ String cmd = "dlogutil";
+ DlogSdbCommand testCommand = new DlogSdbCommand() {
+ @Override
+ public MultiLineReceiver createMultiLineReceiver() {
+ return mockMultiLineReceiver;
+ }
+ };
+
+ try {
+ testCommand.run( null, context );
+ fail( "when device is null then must throw exception" );
+ } catch ( Exception e) {
+ }
+
+ IDevice mockDevice = mock( IDevice.class );
+ testCommand.setDevice( mockDevice );
+ try {
+ testCommand.run( null, context );
+ assertEquals( testCommand.getCommand(), cmd );
+ verify( mockDevice ).executeShellCommand( cmd, mockMultiLineReceiver );
+
+ testCommand.setFilter( "filter" );
+ testCommand.run( null, context );
+ assertEquals( testCommand.getCommand(), cmd + " filter" );
+ verify( mockDevice ).executeShellCommand( cmd + " filter", mockMultiLineReceiver );
+ } catch (Exception e) {
+ fail( "should't throw exception" );
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/sdb/ForwardSdbCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/ForwardSdbCommandTest.java
new file mode 100644
index 000000000..30ba8d2eb
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/ForwardSdbCommandTest.java
@@ -0,0 +1,94 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Test;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.sdblib.IDevice;
+
+/**
+ * ForwardSdbCommandTest
+ *
+ * Test case for {@link ForwardSdbCommand}
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see ForwardSdbCommand
+ */
+public class
+ForwardSdbCommandTest
+extends CommandTest
+{
+ @Test
+ public void test_execute() throws Exception {
+ int localPort = 5000;
+ int remotePort = 4000;
+ ForwardSdbCommand testCommand = new ForwardSdbCommand(localPort, remotePort);
+
+ // device null test
+ try {
+ testCommand.run( null, context );
+ fail( "when device is null then must throw exception" );
+ } catch (Exception e) {
+ }
+
+ try {
+ IDevice mockDevice = mock( IDevice.class );
+ testCommand.setDevice( mockDevice );
+ testCommand.run( null, context );
+ verify( mockDevice ).createForward( localPort, remotePort );
+ } catch (Exception e) {
+ fail( "should't throw exception" );
+ }
+ }
+
+ @Test
+ public void test_undo() throws Exception {
+ int localPort = 5000;
+ int remotePort = 4000;
+ ForwardSdbCommand testCommand = new ForwardSdbCommand(localPort, remotePort);
+
+ // device null test
+ try {
+ testCommand.undo( null, context );
+ fail( "when device is null then must throw exception" );
+ } catch (Exception e) {
+ }
+
+ try {
+ IDevice mockDevice = mock( IDevice.class );
+ testCommand.setDevice( mockDevice );
+ testCommand.undo( null, context );
+ verify( mockDevice ).removeForward( localPort, remotePort );
+ } catch (Exception e) {
+ fail( "should't throw exception" );
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/sdb/PullSdbCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/PullSdbCommandTest.java
new file mode 100644
index 000000000..7da5260d6
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/PullSdbCommandTest.java
@@ -0,0 +1,83 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.tizen.common.Location;
+import org.tizen.common.UnsafeRunner;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.SdbCommandRejectedException;
+import org.tizen.sdblib.SyncService;
+import org.tizen.sdblib.SyncService.SyncResult;
+import org.tizen.sdblib.TimeoutException;
+
+/**
+ * PullSdbCommandTest
+ *
+ * Test case for {@link PullSdbCommand}
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see PullSdbCommand
+ */
+@RunWith( UnsafeRunner.class )
+@Location( { "lib/sdblib.jar", "bin/" } )
+public class
+PullSdbCommandTest
+extends CommandTest
+{
+ @Test
+ public void test_execute() throws Exception {
+ final IDevice mockDevice = mock( IDevice.class );
+ final SyncService mockService = mock( SyncService.class );
+ SyncResult r = mock( SyncResult.class );
+ when( mockService.pullFile( "remotePath", "localPath", SyncService.getNullProgressMonitor() ) )
+ .thenReturn( r );
+
+ PullSdbCommand testCommand = new PullSdbCommand( "remotePath", "localPath" )
+ {
+ @Override
+ protected SyncService getSyncService() throws TimeoutException,
+ SdbCommandRejectedException, IOException {
+ return mockService;
+ }
+ };
+ testCommand.setDevice( mockDevice );
+ testCommand.run( null, context );
+ }
+
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + ":" + getClass().getClassLoader();
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/sdb/PushSdbCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/PushSdbCommandTest.java
new file mode 100644
index 000000000..f37820f69
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/PushSdbCommandTest.java
@@ -0,0 +1,71 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import static org.mockito.Mockito.mock;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+
+import org.junit.Test;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.SdbCommandRejectedException;
+import org.tizen.sdblib.SyncService;
+import org.tizen.sdblib.TimeoutException;
+
+/**
+ * PushSdbCommandTest
+ *
+ * Test case for {@link PushSdbCommand}
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see PushSdbCommand
+ */
+public class
+PushSdbCommandTest
+extends CommandTest
+{
+ @Test
+ public void test_execute() throws Exception {
+ IDevice mockDevice = mock( IDevice.class );
+ Class<?> serviceClass = SyncService.class;
+ Constructor<?>[] con = serviceClass.getDeclaredConstructors();
+ con[0].setAccessible( true );
+ final SyncService mockService = (SyncService) con[0].newInstance( null, null );
+
+ PushSdbCommand testCommand = new PushSdbCommand( "sourcePath", "targetPath" ) {
+ @Override
+ protected SyncService getSyncService() throws TimeoutException,
+ SdbCommandRejectedException, IOException {
+ return mockService;
+ }
+ };
+ testCommand.setDevice( mockDevice );
+ testCommand.run( null, context );
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/sdb/ShellSdbCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/ShellSdbCommandTest.java
new file mode 100644
index 000000000..db7265358
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/sdb/ShellSdbCommandTest.java
@@ -0,0 +1,111 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* GyeongSeok Seo <gyeongseok.seo@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.core.command.sdb;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.junit.Test;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.sdblib.IDevice;
+import org.tizen.sdblib.MultiLineReceiver;
+
+/**
+ * ShellSdbCommandTest
+ *
+ * Test case for {@link ShellSdbCommand}
+ *
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see ShellSdbCommand
+ */
+
+public class
+ShellSdbCommandTest
+extends CommandTest
+{
+ @Test
+ public void test_execute() throws Exception {
+ String cmd = "ls";
+ final MultiLineReceiver mockMultiLineReceiver = mock( MultiLineReceiver.class );
+ ShellSdbCommand testCommand1 = new ShellSdbCommand();
+ ShellSdbCommand testCommand2 = new ShellSdbCommand( cmd ) {
+ @Override
+ public MultiLineReceiver createMultiLineReceiver() {
+ return mockMultiLineReceiver;
+ }
+
+ };
+
+ // construction test
+ assertEquals( testCommand1.getCommand(), null );
+ assertEquals( testCommand2.getCommand(), cmd);
+
+ // time value test
+ assertEquals( testCommand1.getTime(), 90 );
+ testCommand1.setTime( 30 );
+ assertEquals( testCommand1.getTime(), 30 );
+ testCommand1.setTime( 1 );
+ assertEquals( testCommand1.getTime(), 1 );
+ testCommand1.setTime( 0 );
+ assertEquals( testCommand1.getTime(), 90 );
+ testCommand1.setTime( -1 );
+ assertEquals( testCommand1.getTime(), 90 );
+
+ try {
+ // device null test
+ testCommand1.run( null, context );
+ fail( "when device is null then must throw exception" );
+ } catch (Exception e) {
+ }
+
+ IDevice mockDevice = mock( IDevice.class );
+ testCommand1.setDevice( mockDevice );
+ testCommand2.setDevice( mockDevice );
+ try {
+ // command null test
+ testCommand1.run( null, context );
+ fail( "when command is null then must throw exception" );
+ } catch (Exception e) {
+ }
+
+ try {
+ // normal operation test
+ String clearResult = "Test clearResult call";
+ testCommand2.setResult( clearResult );
+ testCommand2.run( null, context );
+
+ // clearResult call test
+ assertNotSame( clearResult, testCommand2.getResult() );
+ // executeShellCommand call test
+ verify( mockDevice ).executeShellCommand( cmd, mockMultiLineReceiver, 90000 );
+ } catch (Exception e) {
+ fail( "should't throw exception" );
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/core/command/zip/ZipCommandTest.java b/org.tizen.common/test/src/org/tizen/common/core/command/zip/ZipCommandTest.java
new file mode 100644
index 000000000..a325eda29
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/core/command/zip/ZipCommandTest.java
@@ -0,0 +1,79 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.core.command.zip;
+
+import static org.junit.Assert.assertTrue;
+import static org.tizen.common.util.ArrayUtil.size;
+import static org.tizen.common.util.IOUtil.getBytes;
+
+import java.io.InputStream;
+
+import org.junit.Test;
+import org.tizen.common.core.command.CommandTest;
+import org.tizen.common.core.command.ExecutionContext;
+import org.tizen.common.core.command.Executor;
+import org.tizen.common.file.FileHandler.Attribute;
+import org.tizen.common.file.VirtualFileHandler;
+
+
+/**
+ * ZipCommandTest
+ *
+ * Test case for {@link ZipCommand}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see ZipCommand
+ */
+public class
+ZipCommandTest
+extends CommandTest
+{
+ /**
+ * Test {@link ZipCommand#execute(Executor, ExecutionContext)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ZipCommand#execute(Executor, ExecutionContext)
+ */
+ @Test
+ public void test_execute() throws Exception {
+ // Given
+ final VirtualFileHandler vfs = (VirtualFileHandler) context.getFileHandler();
+ vfs.makeDirectory( "/test" );
+ vfs.write( "/test/a.txt", "Hello, World" );
+
+ // When
+ final ZipCommand command = new ZipCommand( "/test", "/test.zip" );
+ command.run( getExecutor(), getExecutionContext() );
+
+ // Then
+ assertTrue( (Boolean) vfs.get( "/test.zip", Attribute.EXISTS ) );
+ final InputStream in = vfs.read( "/test.zip" );
+ assertTrue( 0 < size( getBytes( in, true ) ) );
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/file/SimpleFileFilterTest.java b/org.tizen.common/test/src/org/tizen/common/file/SimpleFileFilterTest.java
new file mode 100755
index 000000000..cb61e5ce2
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/file/SimpleFileFilterTest.java
@@ -0,0 +1,90 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Test;
+import org.tizen.common.file.filter.WildCardFilter;
+
+
+/**
+ * <p>
+ * SimpleFileFilterTest.
+ *
+ * Test case for {@link SimpleFileFilter}
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see SimpleFileFilter
+ */
+public class
+SimpleFileFilterTest
+{
+ /**
+ * Test {@link SimpleFileFilter#accept(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see SimpleFileFilter#accept(String, String)
+ */
+ @Test
+ public
+ void
+ test_accept()
+ throws Exception
+ {
+ SimpleFileFilter filter = new SimpleFileFilter();
+ filter.addIncludes( new WildCardFilter( "Test*" ) );
+ assertTrue( filter.accept( null, "/test/Test.txt" ) );
+ assertFalse( filter.accept( null, "/test/Te.txt" ) );
+
+ filter.addExcludes( new WildCardFilter( "T*" ) );
+ assertFalse( filter.accept( null, "/test/Test.txt" ) );
+
+ try
+ {
+ filter.accept( null, "xxx.txt" );
+ fail();
+ } catch ( final Exception e )
+ {
+ }
+
+ filter.clearIncludes();
+ filter.setExcludes( new WildCardFilter( ".*" ), new WildCardFilter( "*~" ) );
+ assertTrue( filter.accept( null, "a.a.a." ) );
+ assertFalse( filter.accept( null, ".aaa." ) );
+ assertTrue( filter.accept( null, "~a~a~a~." ) );
+ assertFalse( filter.accept( null, "~a~a~a~" ) );
+ assertFalse( filter.accept( null, ".project" ) );
+ assertFalse( filter.accept( null, ".classpath" ) );
+ assertFalse( filter.accept( null, "viclone.txt~" ) );
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/file/VirtualFileHandlerTest.java b/org.tizen.common/test/src/org/tizen/common/file/VirtualFileHandlerTest.java
new file mode 100644
index 000000000..d61fd69f6
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/file/VirtualFileHandlerTest.java
@@ -0,0 +1,71 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file;
+
+import static org.junit.Assert.assertTrue;
+import static org.tizen.common.util.ArrayUtil.size;
+import static org.tizen.common.util.IOUtil.getBytes;
+
+import org.junit.Test;
+
+
+/**
+ * <p>
+ * VirtualFileHandlerTest.
+ *
+ * Test case for {@link VirtualFileHandler}
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see VirtualFileHandler
+ */
+public class
+VirtualFileHandlerTest
+{
+ /**
+ * Test {@link VirtualFileHandler#write(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see VirtualFileHandler#write(String, String)
+ */
+ @Test
+ public
+ void
+ test_write()
+ throws Exception
+ {
+ final VirtualFileHandler vfs = new VirtualFileHandler();
+
+ vfs.makeDirectory( "/test" );
+
+ vfs.write( "/test/a.txt", "Hello, World" );
+
+ assertTrue( 0 < size( getBytes( vfs.read( "/test/a.txt" ) ) ) );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterFactoryTest.java b/org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterFactoryTest.java
new file mode 100644
index 000000000..0bb5f3b67
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterFactoryTest.java
@@ -0,0 +1,81 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file.filter;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import org.junit.Test;
+
+
+/**
+ * <p>
+ * WildCardFilterFactoryTest.
+ *
+ * Test case for {@link WildCardFilterFactory}
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see WildCardFilterFactory
+ */
+public class
+WildCardFilterFactoryTest
+{
+
+ /**
+ * Test {@link WildCardFilterFactory#create(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see WildCardFilterFactory#create(String)
+ */
+ @Test
+ public
+ void
+ test_create()
+ throws Exception
+ {
+ final WildCardFilterFactory factory = new WildCardFilterFactory();
+
+ assertNotNull( factory.create( "*" ) );
+ assertNotNull( factory.create( "**" ) );
+ assertNotNull( factory.create( "?" ) );
+ assertNotNull( factory.create( "Test" ) );
+ assertNotNull( factory.create( "" ) );
+ try
+ {
+ factory.create( null );
+ fail();
+ }
+ catch ( NullPointerException e )
+ {
+ }
+
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterTest.java b/org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterTest.java
new file mode 100644
index 000000000..b5477a22d
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/file/filter/WildCardFilterTest.java
@@ -0,0 +1,89 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.file.filter;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+
+/**
+ * <p>
+ * WildCardFilterTest.
+ *
+ * Test case for {@link WildCardFilter}
+ *
+ * </p>
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see WildCardFilter
+ */
+public class
+WildCardFilterTest
+{
+ /**
+ * Test {@link WildCardFilter#accept(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see WildCardFilter#accept(String, String)
+ */
+ @Test
+ public void
+ test_accept()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "aaa*", "aaaa/abc.text", false },
+ new Object[] { "aaa*", "aaaa/aaa.text", true },
+ new Object[] { "aaa*", "aaaa/aaa33.text", true },
+ new Object[] { "aaa*", "aaaa/aa", false },
+ new Object[] { ".*", ".text", true },
+ new Object[] { "*Test*", "A_Test", true },
+ };
+
+
+ int iCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iCase;
+
+ final String pattern = (String) TEST_CASE[0];
+ final String path = (String) TEST_CASE[1];
+ final boolean expected = (Boolean) TEST_CASE[2];
+
+ // Given
+
+ // When
+ final WildCardFilter filter = new WildCardFilter();
+ filter.setPattern( pattern );
+
+ // Then
+ assertEquals( expected, filter.accept( "/", path ) );
+
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/ui/page/preference/MessagesTest.java b/org.tizen.common/test/src/org/tizen/common/ui/page/preference/MessagesTest.java
new file mode 100644
index 000000000..7b56ab266
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/ui/page/preference/MessagesTest.java
@@ -0,0 +1,66 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.page.preference;
+
+import static org.junit.Assert.assertFalse;
+
+import org.junit.Test;
+import org.tizen.common.util.StringUtil;
+
+
+/**
+ * MessagesTest
+ *
+ * Test case for {@link MessagesTest}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see MessagesTest
+ */
+public class MessagesTest
+{
+ /**
+ * Test {@link Messages}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Messages}
+ * @see Messages#DESCRIPTION
+ * @see Messages#GROUP1
+ * @see Messages#GROUP2
+ * @see Messages#LABEL_LOCATION
+ * @see Messages#LABEL_UPDATE
+ */
+ @Test
+ public void test_Messages() throws Exception
+ {
+ assertFalse( StringUtil.isEmpty( Messages.DESCRIPTION ) );
+ assertFalse( StringUtil.isEmpty( Messages.GROUP1 ) );
+ assertFalse( StringUtil.isEmpty( Messages.GROUP2 ) );
+ assertFalse( StringUtil.isEmpty( Messages.LABEL_LOCATION ) );
+ assertFalse( StringUtil.isEmpty( Messages.LABEL_UPDATE ) );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/ui/page/wizard/TrayWizardPageTest.java b/org.tizen.common/test/src/org/tizen/common/ui/page/wizard/TrayWizardPageTest.java
new file mode 100644
index 000000000..15a560945
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/ui/page/wizard/TrayWizardPageTest.java
@@ -0,0 +1,91 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.ui.page.wizard;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.junit.Test;
+import org.tizen.common.ui.dialog.ClosableTray;
+
+
+/**
+ * TrayWizardPageTest
+ *
+ * Test case for {@link TrayWizardPage}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see TrayWizardPage
+ */
+public class
+TrayWizardPageTest
+{
+ public void test_TrayWizardPage() throws Exception
+ {
+ assertEquals( "Test Page", (new TrayWizardPage( "Test Page" ) {
+ public void createControl(Composite parent)
+ {
+ }
+ }).getName() );
+
+ assertEquals( "Title", (new TrayWizardPage( "Test Page", "Title", null ) {
+ public void createControl(Composite parent)
+ {
+ }
+ }).getTitle() );
+ }
+ @Test
+ public
+ void
+ test_openClosableTray()
+ throws Exception
+ {
+ final TrayWizardPage page = new TrayWizardPage( "Test Page" )
+ {
+ public void createControl(Composite parent)
+ {
+ }
+ };
+
+ /*
+ * This means that functional is successful If run on WizardDialog
+ */
+ final IWizard wizard = mock( IWizard.class );
+ final WizardDialog dialog = mock( WizardDialog.class );
+ when( wizard.getContainer() ).thenReturn( dialog );
+ final ClosableTray tray = mock( ClosableTray.class );
+
+ page.setWizard( wizard );
+ page.openClosableTray( tray );
+
+ verify( dialog ).openTray( tray );
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ArrayUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/ArrayUtilTest.java
new file mode 100755
index 000000000..863a1b7f7
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ArrayUtilTest.java
@@ -0,0 +1,765 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+* Gun Kim <gune.kim@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.tizen.common.util.ArrayUtil.safe;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
+import java.util.Iterator;
+
+import org.junit.Test;
+
+
+/**
+ * ArrayUtilsTest
+ *
+ * Test case for {@link ArrayUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see ArrayUtil
+ */
+public class ArrayUtilTest
+{
+ public static int arrayIndex = 0;
+ public static boolean successTest = true;
+
+ /**
+ * Test {@link ArrayUtil#pickupFirst(Collection)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ArrayUtil#pickupFirst(Collection)
+ */
+ @Test
+ public void
+ test_pickupFirst()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello", null }, "hello" },
+ new Object[] { new Object[] { null, "hello" }, null },
+ new Object[] { new Object[] { "A", "B" }, "A" },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Object[] input = (Object[]) TEST_CASE[0];
+ final Object expected = (Object) TEST_CASE[1];
+
+ assertEquals( iTestCase + " th test case", expected, ArrayUtil.pickupFirst( input ) );
+ }
+ }
+
+ /**
+ * Test {@link ArrayUtil#pickupLast(Collection)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ArrayUtil#pickupLast(Collection)
+ */
+ @Test
+ public void
+ test_pickupLast()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello", null }, null },
+ new Object[] { new Object[] { null, "hello" }, "hello" },
+ new Object[] { new Object[] { "A", "B" }, "B" },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Object[] input = (Object[]) TEST_CASE[0];
+ final Object expected = (Object) TEST_CASE[1];
+
+ assertEquals( iTestCase + " th test case", expected, ArrayUtil.pickupLast( input ) );
+ }
+ }
+
+
+ /**
+ * Test {@link ArrayUtil#iterator(Object[])}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ArrayUtil#iterator(Object[])
+ */
+ @Test
+ public void test_iterator() throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null },
+ new Object[] { "hello" },
+ new Object[] { null, "hello" },
+ new Object[] { "A", "B" },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Object[] array = TEST_CASE;
+ final ArrayList<Object> list = new ArrayList<Object>( Arrays.asList( array ) );
+ final Iterator<Object> iter = list.iterator();
+ final Iterator<Object> testTarget = ArrayUtil.iterator( array );
+
+ int iElement = 0;
+ while ( iter.hasNext() && testTarget.hasNext() )
+ {
+ assertEquals( iTestCase + " th test case :" + (++iElement) + " th element", iter.next(), testTarget.next() );
+ }
+ assertEquals( iTestCase + "th test case's last assert :", iter.hasNext(), testTarget.hasNext() );
+ }
+
+ try
+ {
+ final Object[] array = new Object[] { "a", "b", "c" };
+ final Iterator<Object> iter = ArrayUtil.iterator( array );
+ assertTrue( iter.hasNext() );
+ assertEquals( array[0], iter.next() );
+
+ array[1] = "d";
+
+ assertTrue( iter.hasNext() );
+ iter.next();
+ fail( "ConcurrentModificatoinException Test fail" );
+
+ } catch ( ConcurrentModificationException e )
+ {
+ // Test Success
+ }
+ }
+
+ /**
+ * Test {@link ArrayUtil#iterate(Object[], IteratingRunner, boolean)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link ArrayUtil#iterate(Object[], IteratingRunner, boolean)}
+ */
+ @Test
+ public void test_iterator_with_iteratingRunner() {
+ final Object[][] TEST_CASES = new Object[][] {
+ null,
+ new Object[] { null },
+ new Object[] { "hello" },
+ new Object[] { null, "hello" },
+ new Object[] { "A", "B" },
+ };
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final Object[] array = TEST_CASE;
+
+ try {
+ ArrayUtil.iterate(array, null, false);
+ } catch (InvocationTargetException e1) {
+ fail("Failed iterate(Collection, null, false) test");
+ }
+
+ arrayIndex = 0;
+ successTest = true;
+ try {
+ ArrayUtil.iterate(array,
+ new IteratingRunner<Object>() {
+ @Override
+ public void run(Object arg) {
+ if ( successTest && arg != array[arrayIndex++] ) {
+ successTest = false;
+ }
+ }
+ },
+ true);
+ if ( !successTest ) {
+ fail("Failed iterate(Collection, IteratingRunner, true) test");
+ }
+ } catch (InvocationTargetException e) {
+ fail("Failed iterate(Collection, IteratingRunner, true) test");
+ }
+
+ arrayIndex = 0;
+ successTest = true;
+ try {
+ ArrayUtil.iterate(array,
+ new IteratingRunner<Object>() {
+ @Override
+ public void run(Object arg) {
+ if ( arg == null ) {
+ successTest = false;
+ return;
+ }
+ if ( successTest ) {
+ for ( int i = arrayIndex ; i < array.length ; i++ ) {
+ if( array[i] == null ) {
+ continue;
+ }
+ if ( arg != array[i] ) {
+ successTest = false;
+ return;
+ }
+ else {
+ arrayIndex = ++i;
+ }
+ }
+ }
+ }
+ },
+ false);
+ if ( !successTest ) {
+ fail("Failed iterate(Collection, IteratingRunner, false) test");
+ }
+ } catch (InvocationTargetException e) {
+ fail("Failed iterate(Collection, IteratingRunner, false) test");
+ }
+ }
+ }
+
+
+ /**
+ * Test {@link ArrayUtil#convertToWrapper(char[])}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ArrayUtil#convertToWrapper(char[])
+ */
+ @Test
+ public void test_convertToWrapper() throws Exception
+ {
+ final char[] input = "hello".toCharArray();
+ final Character[] ret = ArrayUtil.convertToWrapper( input );
+
+ assertEquals( input.length, ret.length );
+ }
+
+ /**
+ * Test {@link ArrayUtil#filter(Object[], IteratingAcceptor, boolean)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ArrayUtil#filter(Object[], IteratingAcceptor, boolean)
+ */
+ @Test
+ public void test_filter() throws Exception
+ {
+ final Character[] input = ArrayUtil.convertToWrapper( "hello".toCharArray() );
+
+ assertTrue( Arrays.equals(
+ new Character[] { 'l', 'l' },
+ ArrayUtil.filter( input, new IteratingAcceptor<Character>() {
+ public boolean accept( Character arg)
+ {
+ return ( 'l' == arg );
+ }
+ }, true )
+ ) );
+ }
+
+ @Test
+ public void test_toObjectArray() {
+ final Object[][] inputArray = new Object[][]{
+ null,
+ new String[]{"hello", "test", "java"},
+ new Integer[]{10, 20, 30},
+ {10,20,30},
+ {true, false, true},
+ {true, 10, false},
+ new Object[]{"hello", 10, 5},
+ new Object[]{5, "java", 5},
+ new Object[]{null, "hello", 10},
+ new Object[]{null, null, null},
+ new Object[]{ }
+ };
+
+ final int inputInt[] = {10,20,30};
+ final boolean inputBool[] = {true, false, false};
+
+ Object[] actualData = null;
+
+ for ( Object[] input : inputArray ) {
+ actualData = ArrayUtil.toObjectArray(input);
+ if ( (input == null || input.length == 0) ) {
+ if ( actualData.length != 0 ) {
+ fail("Failed toObjectArray(object) test");
+ }
+ }
+ else {
+ if ( input != actualData) {
+ fail("Failed toObjectArray(object) test");
+ }
+ }
+ }
+
+ actualData = ArrayUtil.toObjectArray(inputInt);
+ if ( !(actualData instanceof Integer[]) ) {
+ fail("Failed toObjectArray(int[]) test");
+ }
+ actualData = ArrayUtil.toObjectArray(inputBool);
+ if ( !(actualData instanceof Boolean[]) ) {
+ fail("Failed toObjectArray(boolean[]) test");
+ }
+ }
+
+ @Test
+ public void test_size_primitive(){
+ final boolean[][] inputBool = {
+ null,
+ {false},
+ {true, true},
+ };
+ final byte[][] inputByte = {
+ null,
+ {0x00},
+ {0x1a, 0x10},
+ };
+ final char[][] inputChar = {
+ null,
+ {'a'},
+ {'a', 'b'}
+ };
+ final short[][] inputShort = {
+ null,
+ {1},
+ {10, 20}
+ };
+ final int[][] inputInt = {
+ null,
+ {100},
+ {200, 300}
+ };
+ final long[][] inputLong = {
+ null,
+ {100l},
+ {200l, 300l}
+ };
+ final float[][] inputFloat = {
+ null,
+ {100f},
+ {200f, 300f}
+ };
+ final double[][] inputDouble = {
+ null,
+ {100d},
+ {200d, 300d}
+ };
+ int size = 0;
+
+ for ( boolean[] input : inputBool ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(boolean[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( byte[] input : inputByte ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(byte[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( char[] input : inputChar ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(char[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( short[] input : inputShort ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(short[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( int[] input : inputInt ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(int[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( long[] input : inputLong ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(long[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( float[] input : inputFloat ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(float[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+
+ for ( double[] input : inputDouble ) {
+ size = ArrayUtil.size(input);
+ if ( input == null ) {
+ if ( size != 0 ) {
+ fail("Failed size(double[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, ArrayUtil.size(input));
+ }
+ }
+ }
+
+ @Test
+ public void test_size() {
+ final Object[][] inputArray = new Object[][]{
+ null,
+ new String[]{"hello", "test", "java"},
+ new Integer[]{10, 20, 30},
+ {10,20,30},
+ {true, false, true},
+ {true, 10, false},
+ new Object[]{"hello", 10, 5},
+ new Object[]{5, "java", 5},
+ new Object[]{null, "hello", 10},
+ new Object[]{null, null, null},
+ new Object[]{ }
+ };
+ final int inputInt[] = {10,20,30};
+ final boolean inputBool[] = {true, false, false};
+
+ int size = 0;
+ int size2 = 0;
+ for ( Object[] input : inputArray ) {
+ size = ArrayUtil.size(input);
+ if ( input == null || input.length == 0 ) {
+ if (size != 0) {
+ fail("Failed size(T[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, size);
+ }
+
+ size2 = ArrayUtil.size((Object)input);
+ if ( input == null || input.length == 0 ) {
+ if (size2 != 0) {
+ fail("Failed size(T[]) test");
+ }
+ }
+ else {
+ assertEquals(input.length, size2);
+ }
+ }
+
+ assertEquals("Failed size(Object) test", inputInt.length, ArrayUtil.size((Object)inputInt));
+ assertEquals("Failed size(Object) test", inputInt.length, ArrayUtil.size((Object)inputBool));
+ }
+
+ @Test
+ public void test_add() {
+ final Object[][] inputArray = new Object[][]{
+ null,
+ new String[]{"hello", "test", "java"},
+ new Integer[]{10, 20, 30},
+ {10,20,30},
+ {true, false, true},
+ {true, 10, false},
+ new Object[]{"hello", 10, 5},
+ new Object[]{5, "java", 5},
+ new Object[]{null, "hello", 10},
+ new Object[]{null, null, null},
+ new Object[]{ }
+ };
+ final Object[] inputAddArg = new Object[]{
+ null,
+ "hello",
+ 10,
+ true
+ };
+
+ Object[] actualData = null;
+
+ for ( Object[] input : inputArray ) {
+ for ( Object arg : inputAddArg ) {
+ try {
+ actualData = ArrayUtil.add(input, arg);
+ } catch (ArrayStoreException e) {
+ if ( input == null ) {
+ fail("Failed add(T[], Object) test");
+ }
+ if ( arg.getClass().getName().equals(input[0].getClass().getName()) ) {
+ fail("Failed add(T[], Object) test");
+ }
+ continue;
+ }
+ if ( input == null || input.length == 0 ) {
+ assertEquals(1, actualData.length);
+ assertEquals(arg, actualData[0]);
+ }
+ else {
+ assertEquals(input.length + 1 , actualData.length);
+ assertEquals(arg, actualData[input.length]);
+ }
+ }
+ }
+ }
+
+ @Test
+ public void test_remove() {
+
+ assertArrayEquals( new String[] { "a", "b", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, -1 ) );
+ assertArrayEquals( new String[] { "b", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 0 ) );
+ assertArrayEquals( new String[] { "a", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 1 ) );
+ assertArrayEquals( new String[] { "a", "b" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 2 ) );
+ assertArrayEquals( new String[] { "a", "b", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 3 ) );
+
+ assertArrayEquals( new String[] { "a", "b", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, -1, 0 ) );
+ assertArrayEquals( new String[] { "b", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 0, 1 ) );
+ assertArrayEquals( new String[] { "a", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 1, 2 ) );
+ assertArrayEquals( new String[] { "a", "b" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 2, 3 ) );
+ assertArrayEquals( new String[] { "a", "b", "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, 3, 4 ) );
+
+ assertArrayEquals( new String[] { "c" }, ArrayUtil.remove( new String[] { "a", "b", "c" }, -1, 2 ) );
+
+ final Object[][] inputArray = new Object[][]{
+ null,
+ new String[]{"hello", "test", "java", "c", "c++", "junit", "time"},
+ new Integer[]{10, 20, 30, 40, 50, 60, 70, 80, 90},
+ {10, 20, 30, 40, 50, 60, 70, 80, 90, 100},
+ {true, false, true, true, false, true, false},
+ {true, 10, false, 20, "test", "java", 30},
+ new Object[]{"hello", 10, 5, 20, 30, true},
+ new Object[]{5, "java", 5},
+ new Object[]{null, "hello", 10},
+ new Object[]{null, null, null},
+ new Object[]{ }
+ };
+ Object[] actualData = null;
+
+ for ( Object[] input : inputArray ) {
+ for ( int i = -1 ; i < 10 ; i++ ) {
+ for( int j = -1 ; j < 10 ; j++ ) {
+ int deleteCount = 0;
+ try {
+ actualData = ArrayUtil.remove( input, i, j);
+ i = Math.max( 0, i );
+ if( j <= i) {
+ assertArrayEquals(input , actualData);
+ }
+ else {
+ deleteCount = j - i;
+ for ( int k = 0 ; k < actualData.length ; k++ ) {
+ if ( k >= i ) {
+ assertEquals(
+ "K:" + k + ", J:" + j + ", I:" +i + ", Input :" + input[k + deleteCount] + ", Actual :" + actualData[k],
+ input[k+deleteCount], actualData[k]);
+ }
+ else {
+ assertEquals(
+ "K:" + k + ", J:" + j + ", I:" +i + ", Input :" + input[k] + ", Actual :" + actualData[k],
+ input[k], actualData[k]);
+ }
+
+ }
+ }
+ }
+ catch ( ArrayIndexOutOfBoundsException e ) {
+ if ( j >= input.length || i >= input.length ) {
+ continue;
+ }
+ else {
+ fail("Failed remove(Object[], i : " + i + " , j : " + j + ") test");
+ }
+ }
+ catch ( IllegalArgumentException e ) {
+ if ( i >= j ) {
+ continue;
+ }
+ else {
+ fail("Failed remove(Object[], int, int) test");
+ }
+ }
+ catch ( NullPointerException e ){
+ if ( input == null) {
+ continue;
+ }
+ else {
+ fail("Failed remove(Object[], int, int) test");
+ }
+ }
+ catch (NegativeArraySizeException e) {
+ if ( input.length < j - i ) {
+ continue;
+ }
+ else {
+ fail("Failed remove(Object[], int, int) test");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ public void test_contains() {
+ final Object[][] inputArray = new Object[][]{
+ null,
+ new String[]{"hello", "test", "java"},
+ new Integer[]{10, 20, 30},
+ {10,20,30},
+ {true, false, true},
+ {true, 10, false},
+ new Object[]{"hello", 10, 5},
+ new Object[]{5, "java", 5},
+ new Object[]{null, "hello", 10},
+ new Object[]{null, null, null},
+ new Object[]{ }
+ };
+ final Object[] inputElement = new Object[]{
+ 10583,
+ "zxcvb",
+ };
+
+ boolean actualData = true;
+
+ for ( Object[] input : inputArray ) {
+ if ( input == null ) {
+ actualData = ArrayUtil.contains(input, "blah");
+ assertEquals( false, actualData );
+ }
+ else {
+ for ( Object element : input) {
+ actualData = ArrayUtil.contains(input, element);
+ assertEquals( true, actualData );
+ }
+ }
+ for ( Object element : inputElement ) {
+ actualData = ArrayUtil.contains(input, element);
+ assertEquals( false, actualData );
+ }
+ }
+ }
+
+ @Test
+ public void test_get() {
+ final Object[][] inputArray = new Object[][]{
+ null,
+ new String[]{"hello", "test", "java"},
+ new Integer[]{10, 20, 30},
+ {10,20,30},
+ {true, false, true},
+ {true, 10, false},
+ new Object[]{"hello", 10, 5},
+ new Object[]{5, "java", 5},
+ new Object[]{null, "hello", 10},
+ new Object[]{null, null, null},
+ new Object[]{ }
+ };
+
+ for( Object[] input : inputArray) {
+ if ( input == null || input.length == 0 ) {
+ assertEquals( null, ArrayUtil.get(input, -1) );
+ assertEquals( null, ArrayUtil.get(input, 0) );
+ }
+ else {
+ assertEquals(null, ArrayUtil.get(input, -1) );
+ assertEquals( input[0], ArrayUtil.get(input, 0) );
+ assertEquals(null, ArrayUtil.get(input, input.length + 1) );
+ }
+ }
+ }
+
+ public
+ void
+ test_safe()
+ throws Exception
+ {
+ final String[][] TEST_CASES = new String[][] {
+ null,
+ new String[] { null, "aaa" },
+ new String[] { "hello", "world" },
+ };
+
+ for ( final String[] TEST_CASE : TEST_CASES )
+ {
+ assertNotNull( safe( TEST_CASE ) );
+ for ( final String value : safe( TEST_CASE ) )
+ {
+ assertTrue( "value :" + value, true );
+ }
+ }
+
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/AssertTest.java b/org.tizen.common/test/src/org/tizen/common/util/AssertTest.java
new file mode 100644
index 000000000..22ed64d07
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/AssertTest.java
@@ -0,0 +1,158 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import org.junit.Test;
+
+/**
+ * AssertTest
+ *
+ * Test case for {@link Assert}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Assert
+ */
+public class
+AssertTest
+{
+ /**
+ * Test {@link Assert#fail(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Assert#fail(String)}
+ */
+ @Test
+ public
+ void
+ test_fail()
+ throws Exception
+ {
+ try
+ {
+ Assert.fail( "Hello" );
+ fail();
+ }
+ catch ( final IllegalArgumentException e )
+ {
+ assertEquals( "Hello", e.getMessage() );
+ }
+ }
+
+ /**
+ * Test {@link Assert#isTrue(boolean)} and
+ * {@link Assert#isTrue(boolean, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Assert#isTrue(boolean)}
+ * @see {@link Assert#isTrue(boolean, String)}
+ */
+ @Test
+ public
+ void
+ test_assertTrue()
+ throws Exception
+ {
+ int a = 5;
+ int b = 2;
+ Assert.isTrue( 3 == a-b, "Good case" );
+
+ Assert.isTrue( 3 == a-b );
+ Assert.isTrue( "abc".equals( "abc" ) );
+ try
+ {
+ Assert.isTrue( 3==4 );
+ fail();
+ }
+ catch ( final IllegalArgumentException e )
+ {
+ }
+
+ }
+
+ /**
+ * Test {@link Assert#assertFalse(boolean)} and
+ * {@link Assert#assertFalse(boolean, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Assert#assertFalse(boolean)}
+ * @see {@link Assert#assertFalse(boolean, String)}
+ */
+ @Test
+ public void
+ test_assertFalse()
+ throws Exception
+ {
+ Assert.isFalse( 3 == 4, "Assertion passed" );
+ Assert.isFalse( 3 == 4 );
+ }
+
+ /**
+ * Test {@link Assert#isNull(Object)} and
+ * {@link Assert#isNull(Object, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Assert#isNull(Object)}
+ * @see {@link Assert#isNull(Object, String)}
+ */
+ @Test
+ public
+ void
+ test_assertNull()
+ throws Exception
+ {
+ Assert.isNull( null );
+ Assert.isNull( null, "Assertion passed" );
+ }
+
+ /**
+ * Test {@link Assert#notNull(boolean)} and
+ * {@link Assert#notNull(boolean, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Assert#notNull(boolean)}
+ * @see {@link Assert#notNull(boolean, String)}
+ */
+ @Test
+ public
+ void
+ test_notNull()
+ throws Exception
+ {
+
+ Assert.notNull( new Object() );
+ Assert.notNull( "Hello", "Assertion passed" );
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/CollectionMapTest.java b/org.tizen.common/test/src/org/tizen/common/util/CollectionMapTest.java
new file mode 100644
index 000000000..95c6140bc
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/CollectionMapTest.java
@@ -0,0 +1,139 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+
+/**
+ * CollectionMapTest
+ *
+ * Test case for {@link CollectionMap}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see CollectionMap
+ */
+public class
+CollectionMapTest
+{
+ /**
+ * Test {@link CollectionMap#put(Object, Object)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CollectionMap#put(Object, Object)
+ */
+ public
+ void
+ test_put()
+ throws Exception {
+ final CollectionMap<String, String> map = new CollectionMap<String, String>();
+
+ map.put( "hello", "world1" );
+
+ assertEquals( Arrays.asList( "world1" ), map.get( "hello" ) );
+ map.put( "hello", "world2" );
+ assertEquals( Arrays.asList( "world1", "world2" ), map.get( "hello" ) );
+ }
+
+
+ /**
+ * Test {@link CollectionMap#get(Object)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CollectionMap#get(Object)
+ */
+ @Test
+ public
+ void
+ test_get()
+ throws Exception
+ {
+ final CollectionMap<String, String> map = new CollectionMap<String, String>();
+
+ map.put( "hello", "world1" );
+
+ assertEquals( Arrays.asList( "world1" ), map.get( "hello" ) );
+ map.put( "hello", "world2" );
+ assertEquals( Arrays.asList( "world1", "world2" ), map.get( "hello" ) );
+ }
+
+ /**
+ * Test {@link CollectionMap#remove(Object)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CollectionMap#remove(Object)
+ */
+ @Test
+ public
+ void
+ test_remove()
+ throws Exception
+ {
+ final CollectionMap<String, String> map = new CollectionMap<String, String>();
+
+ map.put( "hello", "world1" );
+ map.put( "hello", "world2" );
+ assertEquals( Arrays.asList( "world1", "world2" ), map.get( "hello" ) );
+
+ map.remove( "hello", "world1" );
+ assertEquals( Arrays.asList( "world2" ), map.get( "hello" ) );
+ map.remove( "hello", "world1" );
+ assertEquals( Arrays.asList( "world2" ), map.get( "hello" ) );
+ map.remove( "hello", "world2" );
+ assertEquals( null, map.get( "hello" ) );
+ }
+
+
+ /**
+ * Test {@link CollectionMap#toString()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CollectionMap#toString()
+ */
+ @Test
+ public
+ void
+ test_toString()
+ throws Exception
+ {
+ final CollectionMap<String, String> map = new CollectionMap<String, String>();
+ map.put( "a", "b" );
+ map.put( "a", "c" );
+
+ assertEquals( "CollectionMap[a=[b, c]]", map.toString() );
+
+ map.put( "c", "d" );
+ assertEquals( "CollectionMap[a=[b, c], c=[d]]", map.toString() );
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/CollectionUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/CollectionUtilTest.java
new file mode 100644
index 000000000..cbce5521b
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/CollectionUtilTest.java
@@ -0,0 +1,950 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.junit.Test;
+
+
+/**
+ * CollectionUtilsTest
+ *
+ * Test case for {@link CollectionUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ * @author GyeongSeok Seo{@literal <gyeongseok.seo@samsung.com>} (S-Core)
+ *
+ * @see CollectionUtil
+ */
+public class
+CollectionUtilTest
+{
+ /**
+ * Test {@link CollectionUtil#isEmpty(java.util.Collection)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CollectionUtil#isEmpty(java.util.Collection)
+ */
+ @Test
+ @SuppressWarnings("serial")
+ public void test_isEmpty() throws Exception
+ {
+ assertTrue( CollectionUtil.isEmpty( null ) );
+ assertTrue( CollectionUtil.isEmpty( new HashSet<Object>() ) );
+ assertTrue( CollectionUtil.isEmpty( new HashMap<String, Object>().keySet() ) );
+ assertFalse( CollectionUtil.isEmpty( new ArrayList<Object>() {{ add("Hello"); }} ) );
+ assertFalse( CollectionUtil.isEmpty( new ArrayList<Object>( Arrays.asList( "Hello" ) ) ) );
+ }
+
+ /**
+ * Test {@link CollectionUtil#size(java.util.Collection)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see CollectionUtil#size(java.util.Collection)
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public void test_size() throws Exception
+ {
+ assertEquals( 0, CollectionUtil.size( null ) );
+
+ /* Mock Object using Mockito */
+ final ArrayList<Object> list = mock( ArrayList.class );
+
+ when( list.size() ).thenReturn( 3 );
+ assertEquals( 3, CollectionUtil.size(list) );
+ verify( list ).size();
+
+ final HashMap<String, Object> map = new HashMap<String, Object>();
+ assertEquals( 0, CollectionUtil.size( map.keySet() ) );
+
+ map.put("Hello", 1);
+ map.put("Tizen", 2);
+ assertEquals( 2, CollectionUtil.size( map.keySet() ) );
+ }
+
+ /**
+ * Test {@link CollectionUtil#iterate(java.util.Collection, IteratingRunner)}
+ * and {@link CollectionUtil#iterate(java.util.Collection, IteratingRunner, boolean)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link CollectionUtil#iterate(java.util.Collection, IteratingRunner)}
+ * @see {@link CollectionUtil#iterate(java.util.Collection, IteratingRunner, boolean)}
+ */
+ @Test
+ public void test_iterate() throws Exception
+ {
+ final AtomicInteger count = new AtomicInteger();
+
+ CollectionUtil.iterate(
+ new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) ),
+ new IteratingRunner<String>()
+ {
+ public void run(String arg)
+ {
+ if ( Character.isUpperCase( arg.charAt( 0 ) ) )
+ {
+ count.incrementAndGet();
+ }
+ }
+ }
+ );
+
+ assertEquals( 3, count.get() );
+
+ count.set( 0 );
+ CollectionUtil.iterate(
+ new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) ),
+ new IteratingRunner<String>()
+ {
+ public void run( final String arg)
+ {
+ throw new IllegalStateException();
+ }
+ },
+ true
+ );
+ assertEquals( 0, count.get() );
+ }
+
+ /**
+ * Test {@link CollectionUtil#filter(java.util.Collection, java.util.Collection, IteratingAcceptor, boolean)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link CollectionUtil#filter(java.util.Collection, java.util.Collection, IteratingAcceptor, boolean)}
+ */
+ @Test
+ public void test_filter() throws Exception
+ {
+ final ArrayList<String> results = new ArrayList<String>();
+
+ CollectionUtil.filter(
+ null,
+ results,
+ new IteratingAcceptor<String>()
+ {
+ @Override
+ public boolean accept(String arg) {
+ return true;
+ }
+ },
+ true
+ );
+ assertEquals( 0, CollectionUtil.size(results) );
+
+ results.clear();
+ CollectionUtil.filter(
+ new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) ),
+ results,
+ new IteratingAcceptor<String>()
+ {
+ @Override
+ public boolean accept(String arg) {
+ if ( arg != null && Character.isUpperCase( arg.charAt( 0 ) ) )
+ {
+ return true;
+ }
+ return false;
+ }
+ },
+ true
+ );
+ assertEquals( 3, CollectionUtil.size(results) );
+
+ results.clear();
+ CollectionUtil.filter(
+ new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) ),
+ results,
+ new IteratingAcceptor<String>()
+ {
+ @Override
+ public boolean accept(String arg) {
+ if ( arg != null && Character.isUpperCase( arg.charAt( 0 ) ) )
+ {
+ return true;
+ }
+ throw new IllegalStateException();
+ }
+ },
+ true
+ );
+ assertEquals( 3, CollectionUtil.size(results) );
+ }
+
+ /**
+ * Test {@link CollectionUtil#pickupFirst(Collection)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link CollectionUtil#pickupFirst(Collection)}
+ */
+ @Test
+ public void
+ test_pickupFirst()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello", null }, "hello" },
+ new Object[] { new Object[] { null, "hello" }, null },
+ new Object[] { new Object[] { "A", "B" }, "A" },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Object[] closeables = (Object[]) TEST_CASE[0];
+ final Object expected = (Object) TEST_CASE[1];
+
+ Collection<Object> collection = null;
+ if ( null != closeables )
+ {
+ collection = Arrays.asList( closeables );
+ }
+
+ assertEquals( iTestCase + " th test case", expected, CollectionUtil.pickupFirst( collection ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#pickupLast(Collection)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link CollectionUtil#pickupLast(Collection)}
+ */
+ @Test
+ public void
+ test_pickupLast()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello", null }, null },
+ new Object[] { new Object[] { null, "hello" }, "hello" },
+ new Object[] { new Object[] { "A", "B" }, "B" },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Object[] closeables = (Object[]) TEST_CASE[0];
+ final Object expected = (Object) TEST_CASE[1];
+
+ Collection<Object> collection = null;
+ if ( null != closeables )
+ {
+ collection = Arrays.asList( closeables );
+ }
+
+ assertEquals( iTestCase + " th test case", expected, CollectionUtil.pickupLast( collection ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#iterator(Enumeration)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link CollectionUtil#iterator(Enumeration)}
+ */
+ @Test
+ public
+ void
+ test_iterator()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null },
+ new Object[] { "hello" },
+ new Object[] { null, "hello" },
+ new Object[] { "A", "B" },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Object[] array = TEST_CASE;
+ final Vector<Object> list = new Vector<Object>( Arrays.asList( array ) );
+ final Iterator<Object> iter = list.iterator();
+ final Enumeration<Object> enumeration = list.elements();
+
+ final Iterator<Object> testTarget = CollectionUtil.iterator( enumeration );
+ int iElement = 0;
+ while ( iter.hasNext() && testTarget.hasNext() )
+ {
+ assertEquals( iTestCase + " th test case :" + (++iElement) + " th element", iter.next(), testTarget.next() );
+ }
+ assertEquals( iter.hasNext(), testTarget.hasNext() );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#asList(Object)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link CollectionUtil#asList(Object)}
+ */
+ @Test
+ public
+ void
+ test_asList()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello", null }, null },
+ new Object[] { new Object[] { null, "hello" }, "hello" },
+ new Object[] { new Object[] { "A", "B" }, "B" },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ assertTrue( CollectionUtil.asList(TEST_CASE) instanceof List );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#mergeArrayIntoCollection(Object, Collection)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#mergeArrayIntoCollection(Object, Collection)}
+ */
+ @Test
+ public
+ void
+ test_mergeArrayIntoCollection()
+ throws Exception
+ {
+ final ArrayList<Object> list = new ArrayList<Object>();
+ list.add( "Tizen" );
+ list.add( "Test" );
+
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello", null }, null },
+ new Object[] { new Object[] { null, "hello" }, "hello" },
+ new Object[] { new Object[] { "A", "B" }, "B" },
+ };
+
+ try {
+ CollectionUtil.mergeArrayIntoCollection( TEST_CASES[0], null );
+ fail( "mergeArrayIntoCollection must throw exception" );
+ } catch (NullPointerException e) {
+ }
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final int count = TEST_CASE.length + CollectionUtil.size( list );
+ CollectionUtil.mergeArrayIntoCollection( TEST_CASE, list );
+ assertEquals( count, CollectionUtil.size( list ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#contains(Collection, Object)}
+ * and {@link CollectionUtil#contains(Enumeration, Object)}
+ * and {@link CollectionUtil#contains(Iterator, Object)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#contains(Collection, Object)}
+ * @see {@link CollectionUtil#contains(Enumeration, Object)}
+ * @see {@link CollectionUtil#contains(Iterator, Object)}
+ */
+ @Test
+ public
+ void
+ test_contains()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null },
+ new Object[] { "hello" },
+ new Object[] { null, "hello" },
+ new Object[] { "Tizen", "Test" },
+ };
+
+ assertFalse( CollectionUtil.contains( (Collection<Object>)null , null) );
+ assertFalse( CollectionUtil.contains( (Enumeration<Object>)null , null) );
+ assertFalse( CollectionUtil.contains( (Iterator<Object>)null , null) );
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final Object[] array = TEST_CASE;
+ final Vector<Object> list = new Vector<Object>( CollectionUtil.asList( array ) );
+ final Enumeration<Object> enumeration = list.elements();
+ final Iterator<Object> iter = CollectionUtil.iterator( list.elements() );
+ final Object element = list.get(0);
+ final Object element2 = "False";
+
+ assertTrue( CollectionUtil.contains( list, element ) );
+ assertTrue( CollectionUtil.contains( enumeration, element ) );
+ assertTrue( CollectionUtil.contains( iter, element ) );
+
+ assertFalse( CollectionUtil.contains( list, element2 ) );
+ assertFalse( CollectionUtil.contains( enumeration, element2 ) );
+ assertFalse( CollectionUtil.contains( iter, element2 ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#containsAny(Collection, Collection)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#containsAny(Collection, Collection)}
+ */
+ @Test
+ public
+ void
+ test_containsAny()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null },
+ new Object[] { "hello" },
+ new Object[] { null, "hello" },
+ new Object[] { "Tizen", "Test" },
+ };
+
+ final ArrayList<String> candidates = new ArrayList<String>();
+ candidates.add(null);
+ candidates.add("hello");
+ candidates.add("Test");
+
+ final ArrayList<String> candidates2 = new ArrayList<String>();
+ candidates2.add("False");
+
+ final ArrayList<String> source = new ArrayList<String>();
+ source.add("Tizen");
+ source.add("Test");
+ source.add(null);
+
+ assertFalse( CollectionUtil.containsAny( (Collection<Object>)null , candidates) );
+ assertFalse( CollectionUtil.containsAny( source, (Collection<Object>)null ) );
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final Object[] array = TEST_CASE;
+ final Vector<Object> source2 = new Vector<Object>( CollectionUtil.asList( array ) );
+
+ assertTrue( CollectionUtil.containsAny( source2, candidates ) );
+ assertFalse( CollectionUtil.containsAny( source2, candidates2 ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#isApproximableCollectionType(Class)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#isApproximableCollectionType(Class)}
+ */
+ @Test
+ public
+ void
+ test_isApproximableCollectionType()
+ throws Exception
+ {
+ final List<Class<?>> collectionTypeList = Arrays.asList( new Class<?>[] {
+ Collection.class,
+ Set.class, HashSet.class, SortedSet.class, LinkedHashSet.class, TreeSet.class,
+ List.class, LinkedList.class, ArrayList.class
+ } );
+
+ final List<Class<?>> mapTypeList = Arrays.asList( new Class<?>[] {
+ Map.class, SortedMap.class, HashMap.class, LinkedHashMap.class, TreeMap.class
+ } );
+
+ final List<Class<?>> generalTypeList = Arrays.asList( new Class<?>[] {
+ String.class, Integer.class, Exception.class, File.class
+ } );
+
+ assertFalse( CollectionUtil.isApproximableCollectionType( (Class<?>)null ) );
+
+ final Iterator<Class<?>> iter = collectionTypeList.iterator();
+ while( iter.hasNext() ) {
+ assertTrue( CollectionUtil.isApproximableCollectionType( iter.next() ) );
+ }
+
+ final Iterator<Class<?>> iter2 = mapTypeList.iterator();
+ while( iter2.hasNext() ) {
+ assertFalse( CollectionUtil.isApproximableCollectionType( iter2.next() ) );
+ }
+
+ final Iterator<Class<?>> iter3 = generalTypeList.iterator();
+ while( iter3.hasNext() ) {
+ assertFalse( CollectionUtil.isApproximableCollectionType( iter3.next() ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#isApproximableMapType(Class)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#isApproximableMapType(Class)}
+ */
+ @Test
+ public
+ void
+ test_isApproximableMapType()
+ throws Exception
+ {
+ final List<Class<?>> collectionTypeList = Arrays.asList( new Class<?>[] {
+ Collection.class,
+ Set.class, HashSet.class, SortedSet.class, LinkedHashSet.class, TreeSet.class,
+ List.class, LinkedList.class, ArrayList.class
+ } );
+
+ final List<Class<?>> mapTypeList = Arrays.asList( new Class<?>[] {
+ Map.class, SortedMap.class, HashMap.class, LinkedHashMap.class, TreeMap.class
+ } );
+
+ final List<Class<?>> generalTypeList = Arrays.asList( new Class<?>[] {
+ String.class, Integer.class, Exception.class, File.class
+ } );
+
+ assertFalse( CollectionUtil.isApproximableMapType( (Class<?>)null ) );
+
+ final Iterator<Class<?>> iter = collectionTypeList.iterator();
+ while( iter.hasNext() ) {
+ assertFalse( CollectionUtil.isApproximableMapType( iter.next() ) );
+ }
+
+ final Iterator<Class<?>> iter2 = mapTypeList.iterator();
+ while( iter2.hasNext() ) {
+ assertTrue( CollectionUtil.isApproximableMapType( iter2.next() ) );
+ }
+
+ final Iterator<Class<?>> iter3 = generalTypeList.iterator();
+ while( iter3.hasNext() ) {
+ assertFalse( CollectionUtil.isApproximableMapType( iter3.next() ) );
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#createApproximableCollection(Collection, int)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#createApproximableCollection(Collection, int)}
+ */
+ @Test
+ public
+ void
+ test_createApproximableCollection()
+ throws Exception
+ {
+ final ArrayList<String> list = new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) );
+
+ final HashMap<String, Object> map = new HashMap<String, Object>();
+ map.put("Hello", 1);
+ map.put("Tizen", 2);
+
+ Collection<?> result = CollectionUtil.createApproximableCollection( null, 5 );
+ assertTrue( CollectionUtil.isApproximableCollectionType( result.getClass() ) );
+ result.clear();
+
+ result = CollectionUtil.createApproximableCollection( list, 3 );
+ assertTrue( CollectionUtil.isApproximableCollectionType( result.getClass() ) );
+ result.clear();
+
+ result = CollectionUtil.createApproximableCollection( map.keySet(), 2 );
+ assertTrue( CollectionUtil.isApproximableCollectionType( result.getClass() ) );
+ }
+
+ /**
+ * Test {@link CollectionUtil#createApproximableMap(Map, int)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#createApproximableMap(Map, int)}
+ */
+ @Test
+ public
+ void
+ test_createApproximableMap()
+ throws Exception
+ {
+ final HashMap<String, Object> map = new HashMap<String, Object>();
+ map.put("Hello", 1);
+ map.put("Tizen", 2);
+
+ Map<?,?> result = CollectionUtil.createApproximableMap( null, 5 );
+ assertTrue( CollectionUtil.isApproximableMapType( result.getClass() ) );
+ result.clear();
+
+ result = CollectionUtil.createApproximableMap( map, 1 );
+ assertTrue( CollectionUtil.isApproximableMapType( result.getClass() ) );
+ }
+
+ /**
+ * Test {@link CollectionUtil#toString(Object)}
+ * and {@link CollectionUtil#toString(boolean[])}
+ * and {@link CollectionUtil#toString(char[])}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#toString(Object)}
+ * @see {@link CollectionUtil#toString(boolean[])}
+ * @see {@link CollectionUtil#toString(char[])}
+ */
+ @Test
+ public
+ void
+ test_toString()
+ throws Exception
+ {
+ Object obj = (Object)new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) );
+ boolean [] booleanArray = { true, false };
+ boolean [] booleanArray2 = {};
+ char [] charArray = { 'T', 'i', 'Z', 'e', 'N' };
+ char [] charArray2 = {};
+
+ // toString(Object)
+ String result = CollectionUtil.toString( (Object)null );
+ assertEquals( StringUtil.NULL_STRING, result);
+ result = CollectionUtil.toString( (Object)booleanArray );
+ assertEquals( "{true, false}", result );
+ result = CollectionUtil.toString( (Object)charArray );
+ assertEquals( "{T, i, Z, e, N}", result );
+ result = CollectionUtil.toString(obj);
+ assertEquals( "[hello, Hello, World, null, Test]", result);
+
+ // toString(boolean[])
+ result = CollectionUtil.toString( (boolean[])null );
+ assertEquals( StringUtil.NULL_STRING, result);
+ result = CollectionUtil.toString( booleanArray );
+ assertEquals( "{true, false}", result );
+ result = CollectionUtil.toString( booleanArray2 );
+ assertEquals( "{}", result );
+
+ // toString(char[])
+ result = CollectionUtil.toString( (char[])null );
+ assertEquals( StringUtil.NULL_STRING, result);
+ result = CollectionUtil.toString( charArray );
+ assertEquals( "{T, i, Z, e, N}", result );
+ result = CollectionUtil.toString( charArray2 );
+ assertEquals( "{}", result );
+ }
+
+ /**
+ * Test {@link CollectionUtil#concatenate(Collection, String)}
+ * and {@link CollectionUtil#concatenate(Object[], String)}
+ * and {@link CollectionUtil#concatenate(Iterator, String)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#concatenate(Collection, String)}
+ * @see {@link CollectionUtil#concatenate(Object[], String)}
+ * @see {@link CollectionUtil#concatenate(Iterator, String)}
+ */
+ @Test
+ public
+ void
+ test_concatenate()
+ throws Exception
+ {
+ final String separator = "$";
+
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] {},
+ new Object[] { null },
+ new Object[] { "hello" },
+ new Object[] { null, "hello" },
+ new Object[] { "Tizen", "Test" },
+ };
+
+ assertEquals( StringUtil.NULL_STRING,
+ CollectionUtil.concatenate( (Object[])null, separator ) );
+ assertEquals( StringUtil.NULL_STRING,
+ CollectionUtil.concatenate( (Collection<Object>)null, separator) );
+ assertEquals( StringUtil.NULL_STRING,
+ CollectionUtil.concatenate( (Iterator<Object>)null, separator) );
+
+ int count = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ count++;
+ final Object[] array = TEST_CASE;
+ final Vector<Object> list = new Vector<Object>( CollectionUtil.asList( array ) );
+ Iterator<Object> iter = CollectionUtil.iterator( list.elements() );
+
+ switch (count) {
+ case 1:
+ assertEquals( "{}",
+ CollectionUtil.concatenate( array, separator ) );
+ assertEquals( "{}",
+ CollectionUtil.concatenate( list, separator ) );
+ assertEquals( "{}",
+ CollectionUtil.concatenate( iter, separator ) );
+ break;
+ case 2:
+ assertEquals( StringUtil.NULL_STRING,
+ CollectionUtil.concatenate( array, separator ) );
+ assertEquals( StringUtil.NULL_STRING,
+ CollectionUtil.concatenate( list, separator ) );
+ assertEquals( StringUtil.NULL_STRING,
+ CollectionUtil.concatenate( iter, separator ) );
+ break;
+ case 3:
+ assertEquals( "hello",
+ CollectionUtil.concatenate( array, separator ) );
+ assertEquals( "hello",
+ CollectionUtil.concatenate( list, separator ) );
+ assertEquals( "hello",
+ CollectionUtil.concatenate( iter, separator ) );
+ break;
+ case 4:
+ assertEquals( StringUtil.NULL_STRING+separator+"hello",
+ CollectionUtil.concatenate( array, separator ) );
+ assertEquals( StringUtil.NULL_STRING+separator+"hello",
+ CollectionUtil.concatenate( list, separator ) );
+ assertEquals( StringUtil.NULL_STRING+separator+"hello",
+ CollectionUtil.concatenate( iter, separator ) );
+ break;
+ case 5:
+ assertEquals( "Tizen"+separator+"Test",
+ CollectionUtil.concatenate( array, separator ) );
+ assertEquals( "Tizen"+separator+"Test",
+ CollectionUtil.concatenate( list, separator ) );
+ assertEquals( "Tizen"+separator+"Test",
+ CollectionUtil.concatenate( iter, separator ) );
+
+ iter = CollectionUtil.iterator( list.elements() );
+ assertEquals( "Tizen"+null+"Test",
+ CollectionUtil.concatenate( array, null ) );
+ assertEquals( "Tizen"+null+"Test",
+ CollectionUtil.concatenate( list, null ) );
+ assertEquals( "Tizen"+null+"Test",
+ CollectionUtil.concatenate( iter, null ) );
+
+ iter = CollectionUtil.iterator( list.elements() );
+ assertEquals( "Tizen"+StringUtil.EMPTY_STRING+"Test",
+ CollectionUtil.concatenate( array, StringUtil.EMPTY_STRING ) );
+ assertEquals( "Tizen"+StringUtil.EMPTY_STRING+"Test",
+ CollectionUtil.concatenate( list, StringUtil.EMPTY_STRING ) );
+ assertEquals( "Tizen"+StringUtil.EMPTY_STRING+"Test",
+ CollectionUtil.concatenate( iter, StringUtil.EMPTY_STRING ) );
+ break;
+ }
+
+ }
+ }
+
+ /**
+ * Test {@link CollectionUtil#hashCode(Object)}
+ * and {@link CollectionUtil#hashCode(boolean[])}
+ * and {@link CollectionUtil#hashCode(int[])}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#hashCode(Object)}
+ * @see {@link CollectionUtil#hashCode(boolean[])}
+ * @see {@link CollectionUtil#hashCode(int[])}
+ */
+ @Test
+ public
+ void
+ test_hashCode()
+ throws Exception
+ {
+ Object obj = (Object)new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) );
+ boolean [] booleanArray = { true, false };
+ boolean [] booleanArray2 = {};
+ int [] intArray = { 1, 2, 3, 4, 5 };
+ int [] intArray2 = {};
+
+ // hashCode(Object)
+ assertEquals( 0, CollectionUtil.hashCode( (Object)null ) );
+ assertTrue( 0 != CollectionUtil.hashCode(obj) );
+ assertTrue( 0 != CollectionUtil.hashCode( (Object)booleanArray ) );
+ assertTrue( 0 != CollectionUtil.hashCode( (Object)booleanArray2) );
+ assertTrue( 0 != CollectionUtil.hashCode( (Object)intArray) );
+ assertTrue( 0 != CollectionUtil.hashCode( (Object)intArray2) );
+ assertEquals( CollectionUtil.hashCode(obj), CollectionUtil.hashCode(obj) );
+
+ // hashCode(boolean[])
+ assertEquals( 0, CollectionUtil.hashCode( (boolean[])null ) );
+ assertTrue( 0 != CollectionUtil.hashCode( booleanArray ) );
+ assertTrue( 0 != CollectionUtil.hashCode( booleanArray2) );
+ assertTrue( CollectionUtil.hashCode(booleanArray) != CollectionUtil.hashCode(booleanArray2) );
+ assertEquals( CollectionUtil.hashCode(booleanArray), CollectionUtil.hashCode(booleanArray) );
+
+ // hashCode(int[])
+ assertEquals( 0, CollectionUtil.hashCode( (int[])null ) );
+ assertTrue( 0 != CollectionUtil.hashCode( intArray ) );
+ assertTrue( 0 != CollectionUtil.hashCode( intArray2) );
+ assertTrue( CollectionUtil.hashCode(intArray) != CollectionUtil.hashCode(intArray2) );
+ assertEquals( CollectionUtil.hashCode(intArray), CollectionUtil.hashCode(intArray));
+ }
+
+ /**
+ * Test {@link CollectionUtil#equals(Collection...)}
+ * and {@link CollectionUtil#equals(Object[]...)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#equals(Collection...)}
+ * @see {@link CollectionUtil#equals(Object[]...)}
+ */
+ @SuppressWarnings("unchecked")
+ @Test
+ public
+ void
+ test_equals()
+ throws Exception
+ {
+ final Object obj = (Object)new ArrayList<String>( Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ ) );
+ final Object obj2 = (Object)Arrays.asList(
+ "hello", "Hello", "World", null, "Test"
+ );
+ final Boolean [] booleanArray = { true, false };
+ final Integer [] intArray = { 1, 2, 3, 4, 5 };
+ final Integer [] intArray2 = {};
+ final Object [] objectArray = { 1, 2, 3, 4, 5 };
+ final Object [] objectArray2 = { 1, 2, 3, 4, 5 };
+ final Vector<Object> list = new Vector<Object>( CollectionUtil.asList(objectArray) );
+
+ assertTrue( CollectionUtil.equals( (Object[])null, null) );
+ assertTrue( CollectionUtil.equals( (Collection<Object>)null, null) );
+
+ // equals(Object[]...)
+ assertTrue( CollectionUtil.equals( objectArray, objectArray2 ) );
+ assertTrue( CollectionUtil.equals( objectArray, (Object[])intArray ) );
+ assertFalse( CollectionUtil.equals( objectArray, (Object[])intArray2 ) );
+ assertFalse( CollectionUtil.equals( objectArray, (Object[])booleanArray ) );
+
+ // equals(COllection...)
+ assertTrue( CollectionUtil.equals( (Collection<?>)obj, (Collection<?>)obj2 ) );
+ assertFalse( CollectionUtil.equals( (Collection<?>)obj, (Collection<?>)list ) );
+ }
+
+ /**
+ * Test {@link CollectionUtil#swap(Object[], int, int)}
+ *
+ * @throws Exception is case of failure in test
+ *
+ * @see {@link CollectionUtil#swap(Object[], int, int)}
+ */
+ @Test
+ public
+ void
+ test_swap()
+ throws Exception
+ {
+ final Object [] objectArray = { 1, 2, 3, 4, 5 };
+
+ CollectionUtil.swap( objectArray, 0, 1 );
+ assertEquals( 2, objectArray[0] );
+ assertEquals( 1, objectArray[1] );
+
+ CollectionUtil.swap( objectArray, 1, 0 );
+ assertEquals( 1, objectArray[0] );
+ assertEquals( 2, objectArray[1] );
+
+ CollectionUtil.swap( objectArray, 0, 0 );
+ assertEquals( 1, objectArray[0] );
+ assertEquals( 2, objectArray[1] );
+
+ try {
+ CollectionUtil.swap( objectArray, 0, 5 );
+ fail( "swap must throw exception" );
+ } catch (Exception e) {
+ }
+
+ try {
+ CollectionUtil.swap( objectArray, -1, 0 );
+ fail( "swap must throw exception" );
+ } catch (Exception e) {
+ }
+
+ try {
+ CollectionUtil.swap( null, 0, 1 );
+ fail( "swap must throw exception" );
+ } catch (Exception e) {
+ }
+ }
+}
+
diff --git a/org.tizen.common/test/src/org/tizen/common/util/EFSUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/EFSUtilTest.java
new file mode 100644
index 000000000..27097d251
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/EFSUtilTest.java
@@ -0,0 +1,240 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* Jihoon Song <jihoon80.song@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import java.net.URI;
+import java.net.URL;
+
+import org.junit.*;
+import org.tizen.common.Surrogate;
+import org.tizen.common.util.EFSUtil.DialogChoicer;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileInfo;
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.filesystem.IFileSystem;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.widgets.Shell;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+
+/**
+ * EFSUtilTest.
+ *
+ * Helper related to {@link EFSUtil}
+ *
+ * @author Jihoon Song{@literal <jihoon80.song@samsung.com>} (S-Core)
+ *
+ * @see EFSUtil
+ *
+ */
+public class EFSUtilTest {
+
+ /**
+ * Property key for URL handler
+ */
+ protected static final String PROP_PKG = "java.protocol.handler.pkgs";
+
+ protected static final String TEST_PATH = "test";
+ protected static final String TEST_URL = "cp:///" + TEST_PATH;
+
+ /**
+ * Old property value for URL handler
+ */
+ protected String oldConfig;
+
+
+ /**
+ * Set up URL handler and FileSystem before test
+ */
+ @Before
+ public void setUp() {
+ oldConfig = System.getProperty( PROP_PKG );
+ System.setProperty( PROP_PKG, "org.tizen.common.util.url" );
+
+ // prevent recreation mock-up when called
+ final IFileSystem mockFileSystem = mock(IFileSystem.class);
+
+ EFSUtil.setFileSystemSurrogate(new Surrogate<IFileSystem>() {
+ @Override
+ public IFileSystem getAdapter() {
+ return mockFileSystem;
+ }
+ });
+ }
+
+ /**
+ * Restore URL handler after test
+ */
+ @After
+ public void tearDown() {
+ if ( null == oldConfig ) {
+ System.getProperties().remove( PROP_PKG );
+ } else {
+ System.setProperty( PROP_PKG, oldConfig );
+ }
+ }
+
+ /**
+ * Test {@link EFSUtil#isExistResource(IFileStore)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see EFSUtil#isExistResource(IFileStore)
+ */
+ @Test
+ public void test_isExistResource_IFileStore() throws Exception {
+ // null check
+ IFileStore nullFileStore = null;
+ assertFalse( EFSUtil.isExistResource(nullFileStore) );
+
+
+ IFileInfo mockFileInfo = mock( IFileInfo.class );
+ IFileStore mockFileStore = mock( IFileStore.class );
+ when( mockFileStore.fetchInfo() ).thenReturn( mockFileInfo );
+
+ // true check
+ when( mockFileInfo.exists() ).thenReturn( true );
+ assertTrue( EFSUtil.isExistResource(mockFileStore) );
+
+ // false check
+ when( mockFileInfo.exists() ).thenReturn( false );
+ assertFalse( EFSUtil.isExistResource(mockFileStore) );
+ }
+
+ /**
+ * Test {@link EFSUtil#isExistResource(URI)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see EFSUtil#isExistResource(URI)
+ */
+ @Test
+ public void test_isExistResource_URI() throws Exception {
+ // null check
+ final URI nullURI = null;
+ when( EFSUtil.getFileSystem().getStore(nullURI) ).thenReturn( null );
+ assertFalse( EFSUtil.isExistResource(nullURI) );
+
+
+ IFileInfo mockFileInfo = mock( IFileInfo.class );
+ IFileStore mockFileStore = mock( IFileStore.class );
+ when( mockFileStore.fetchInfo() ).thenReturn( mockFileInfo );
+
+ final URI virtualURI = new URL(TEST_URL).toURI();
+ when( EFSUtil.getFileSystem().getStore(virtualURI) ).thenReturn( mockFileStore );
+
+ // true check
+ when( mockFileInfo.exists() ).thenReturn( true );
+ assertTrue( EFSUtil.isExistResource(virtualURI) );
+
+ // false check
+ when( mockFileInfo.exists() ).thenReturn( false );
+ assertFalse( EFSUtil.isExistResource(virtualURI) );
+ }
+
+ /**
+ * Test {@link EFSUtil#isExistResourceWithDialog(Shell, String, String, DialogChoicer, IFileStore)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see EFSUtil#isExistResourceWithDialog(Shell, String, String, DialogChoicer, IFileStore)
+ */
+ @Test
+ public void test_isExistResourceWithDialog() throws Exception {
+ Shell mockShell = mock( Shell.class );
+ IFileStore mockFileStore = mock( IFileStore.class );
+ IFileInfo mockFileInfo = mock (IFileInfo.class );
+ when(mockFileStore.fetchInfo()).thenReturn(mockFileInfo);
+
+ final Object[][] TEST_CASES = new Object[][] { // [TestCase] [Arguments..., ExpectResult]
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.Cancel, mockFileStore, true, DialogChoicer.Cancel },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.Cancel, mockFileStore, false, DialogChoicer.Cancel },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.NoToAll, mockFileStore, true, DialogChoicer.NoToAll },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.NoToAll, mockFileStore, false, DialogChoicer.NoToAll },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.YesToAll, mockFileStore, true, DialogChoicer.YesToAll },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.YesToAll, mockFileStore, false, DialogChoicer.YesToAll },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.Yes, mockFileStore, false, DialogChoicer.Yes },
+ new Object[] { mockShell, "Title", "Msg", DialogChoicer.No, mockFileStore, false, DialogChoicer.Yes }
+ // except dialog open scenarios
+ };
+
+ DialogChoicer existResourceWithDialog = null;
+
+ for (final Object[] TEST_CASE : TEST_CASES) {
+ final Shell shell = (Shell) TEST_CASE[0];
+ final String title = (String) TEST_CASE[1];
+ final String msg = (String) TEST_CASE[2];
+ final DialogChoicer choicer = (DialogChoicer) TEST_CASE[3];
+ final IFileStore fileStore = (IFileStore) TEST_CASE[4];
+ final boolean exist = (Boolean) TEST_CASE[5];
+ final DialogChoicer expected = (DialogChoicer) TEST_CASE[6];
+
+ when( mockFileInfo.exists() ).thenReturn(exist);
+ existResourceWithDialog = EFSUtil.isExistResourceWithDialog(
+ shell, title, msg, choicer, fileStore);
+ assertEquals( shell + ", " + title + ", " + msg + ", " + choicer + ", " +
+ fileStore.fetchInfo().exists() + " : " + expected, existResourceWithDialog, expected );
+ }
+ }
+
+
+ /**
+ * Test {@link EFSUtil#copy(URI, URI, int, IProgressMonitor)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see EFSUtil#copy(URI, URI, int, IProgressMonitor)
+ */
+ @Test
+ public void test_copy() throws Exception {
+ final URI virtualURI = new URL(TEST_URL).toURI();
+ final IProgressMonitor mockMonitor = mock(IProgressMonitor.class);
+
+ IFileStore mockFileStore = mock( IFileStore.class );
+ when( EFSUtil.getFileSystem().getStore(virtualURI) ).thenReturn( mockFileStore );
+
+ final Object[][] TEST_CASES = new Object[][] { // [TestCase] [Arguments..., ExpectResult]
+ new Object[] { virtualURI, virtualURI, EFS.OVERWRITE, mockMonitor },
+ new Object[] { virtualURI, virtualURI, EFS.SHALLOW, mockMonitor },
+ new Object[] { virtualURI, virtualURI, EFS.OVERWRITE | EFS.SHALLOW, mockMonitor }
+ };
+
+ for (final Object[] TEST_CASE : TEST_CASES) {
+ final URI source = (URI) TEST_CASE[0];
+ final URI destination = (URI) TEST_CASE[1];
+ final int options = (Integer) TEST_CASE[2];
+ final IProgressMonitor monitor = (IProgressMonitor) TEST_CASE[3];
+
+ EFSUtil.copy(source, destination, options, monitor);
+
+ verify( mockFileStore ).copy(mockFileStore, options, mockMonitor);
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/FileUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/FileUtilTest.java
new file mode 100644
index 000000000..22e7b1897
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/FileUtilTest.java
@@ -0,0 +1,113 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.junit.Test;
+
+/**
+ * FileUtilTest
+ *
+ * Test case for {@link FileUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see FileUtil
+ */
+public class FileUtilTest {
+
+ /**
+ * Test {@link FileUtil#getFileExtension(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link FileUtil#getFileExtension(String)}
+ */
+ @Test
+ public void test_getFileExtension() throws Exception {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "aaaa.exe", "exe" },
+ new Object[] { "index.html", "html" },
+ new Object[] { "index.test.html", "html" },
+ new Object[] { "index..html", "html" },
+ new Object[] { ".profile", "profile" },
+ new Object[] { "ReadMe ", null },
+ new Object[] { "ReadMe", null },
+ new Object[] { "ReadMe. ", " " },
+ new Object[] { "ReadMe. test", " test" }
+ };
+
+ int i = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String fileName = (String) TEST_CASE[0];
+ final String expected = (String) TEST_CASE[1];
+ final String result = FileUtil.getFileExtension( fileName );
+
+ assertEquals( ++i + "th Test case :<" + fileName + ", " + expected + ">", expected, result );
+ }
+ }
+
+ /**
+ * Test {@link FileUtil#readTextStream(InputStream input, String encoding)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link FileUtil#readTextStream(InputStream input, String encoding)}
+ */
+ @Test
+ public void test_readTextStream() throws Exception {
+ String text = "Test Text 123";
+ String unicodeText = "\uD55C\uAE00\uD14C\uC2A4\uD2B8";
+
+ try {
+ FileUtil.readTextStream(null, null);
+ fail( "readTextStream must throw exception" );
+ } catch (Exception e) {
+ }
+
+ InputStream input = new ByteArrayInputStream(text.getBytes());
+ String content = FileUtil.readTextStream(input, null);
+ assertEquals(text, content);
+
+ InputStream unicodeInput = new ByteArrayInputStream(unicodeText.getBytes("UTF-8"));
+ String unicodeContent = FileUtil.readTextStream(unicodeInput, "UTF-8");
+ assertEquals(unicodeText, unicodeContent);
+ String isoContent = FileUtil.readTextStream(unicodeInput, "ISO-8859-1");
+ assertNotSame(unicodeText, isoContent);
+
+ if (input != null) {
+ input.close();
+ }
+ if (unicodeInput != null) {
+ unicodeInput.close();
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/FilenameUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/FilenameUtilTest.java
new file mode 100644
index 000000000..42ffdf2ff
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/FilenameUtilTest.java
@@ -0,0 +1,256 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+
+import org.junit.Test;
+
+
+/**
+ * FilenameUtilTest
+ *
+ * Test case for {@link FilenameUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see FilenameUtil
+ */
+public class
+FilenameUtilTest
+{
+ /**
+ * Test {@link FilenameUtil#getCanonicalFragments(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FilenameUtil#getCanonicalFragments(String)
+ */
+ @Test
+ public
+ void
+ test_getCanonicalFragments()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "/aaa/bbb/ccc", new String[] { "aaa", "bbb", "ccc" } },
+ new Object[] { File.separator + "aaa" + File.separator + "bbb" + File.separator + "ccc", new String[] { "aaa", "bbb", "ccc" } },
+ };
+
+ int iTest = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTest;
+ final String input = (String) TEST_CASE[0];
+ final String[] expected = (String[]) TEST_CASE[1];
+
+ assertArrayEquals(
+ iTest + " th test failed. input :<" + input + ">",
+ expected,
+ FilenameUtil.getCanonicalFragments( input )
+ );
+ }
+ }
+
+
+ /**
+ * Test {@link FilenameUtil#addTailingPath(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FilenameUtil#addTailingPath(String, String)
+ */
+ @Test
+ public
+ void
+ test_addTailingPath()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "/aaa/bbb/ccc", "aaa", "/aaa/bbb/ccc/aaa" },
+ new Object[] { "/aaa/bbb/ccc/", "aaa", "/aaa/bbb/ccc/aaa" },
+ new Object[] { "/aaa/bbb/ccc/", "/aaa", "/aaa/bbb/ccc/aaa" },
+ };
+
+ int iTest = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTest;
+ final String path1 = (String) TEST_CASE[0];
+ final String path2 = (String) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+
+ assertEquals(
+ iTest + " th test failed. input :<" + path1 + "," + path2 + ">",
+ expected,
+ FilenameUtil.addTailingPath( path1, path2 )
+ );
+ }
+ }
+
+ /**
+ * Test {@link FilenameUtil#removeTailingPath(String, int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FilenameUtil#removeTailingPath(String, int)
+ */
+ @Test
+ public
+ void
+ test_removeTailingPath()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "/aaa/bbb/ccc", 1, "/aaa/bbb" },
+ new Object[] { File.separator + "aaa" + File.separator + "bbb" + File.separator + "ccc", 1, "/aaa/bbb" },
+ };
+
+ int iTest = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTest;
+ final String input = (String) TEST_CASE[0];
+ final int nRemove = (Integer) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+
+ assertEquals(
+ iTest + " th test failed. input :<" + input + ">",
+ expected,
+ FilenameUtil.removeTailingPath( input, nRemove )
+ );
+ }
+ }
+
+ /**
+ * Test {@link FilenameUtil#getTailingPath(String, int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FilenameUtil#getTailingPath(String, int)
+ */
+ @Test
+ public
+ void
+ test_getTailingPath()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "/aaa/bbb/ccc", 1, "ccc" },
+ new Object[] { "/aaa/bbb/ccc/", 1, "ccc" },
+ new Object[] { "/aaa/bbb/ccc", 2, "bbb/ccc" },
+ new Object[] { File.separator + "aaa" + File.separator + "bbb" + File.separator + "ccc", 1, "ccc" },
+ };
+
+ int iTest = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTest;
+ final String input = (String) TEST_CASE[0];
+ final int nRemove = (Integer) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+
+ assertEquals(
+ iTest + " th test failed. input :<" + input + ">",
+ expected,
+ FilenameUtil.getTailingPath( input, nRemove )
+ );
+ }
+ }
+
+ /**
+ * Test {@link FilenameUtil#getFilename(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FilenameUtil#getFilename(String)
+ */
+ @Test
+ public
+ void
+ test_getFilename()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "/aaa/bbb/ccc", "ccc" },
+ new Object[] { "/aaa/bbb/ccc.jar", "ccc.jar" },
+ new Object[] { File.separator + "aaa" + File.separator + "bbb" + File.separator + "ccc", "ccc" },
+ };
+
+ int iTest = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTest;
+ final String input = (String) TEST_CASE[0];
+ final String expected = (String) TEST_CASE[1];
+
+ assertEquals(
+ iTest + " th test failed. input :<" + input + ">",
+ expected,
+ FilenameUtil.getFilename( input )
+ );
+ }
+ }
+
+ /**
+ * Test {@link FilenameUtil#getExtension(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FilenameUtil#getExtension(String)
+ */
+ @Test
+ public
+ void
+ test_getExtension()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "test.txt", "txt" },
+ new Object[] { "ccc.jar", "jar" },
+ new Object[] { ".aaa", "aaa" },
+ new Object[] { "aaa", "" },
+ };
+
+ int iTest = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTest;
+ final String input = (String) TEST_CASE[0];
+ final String expected = (String) TEST_CASE[1];
+
+ assertEquals(
+ iTest + " th test failed. input :<" + input + ">",
+ expected,
+ FilenameUtil.getExtension( input )
+ );
+ }
+ }
+
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/FilterIteratorTest.java b/org.tizen.common/test/src/org/tizen/common/util/FilterIteratorTest.java
new file mode 100644
index 000000000..931e4d64e
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/FilterIteratorTest.java
@@ -0,0 +1,70 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.junit.Test;
+
+
+/**
+ * FilterIteratorTest
+ *
+ * Test case for {@link FilterIterator}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see FilterIterator
+ */
+public class FilterIteratorTest
+{
+ /**
+ * Test {@link FilterIterator#isAcceptable(Object)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link FilterIterator#isAcceptable(Object)}
+ */
+ @Test
+ public void test_isAcceptable() throws Exception
+ {
+ final ArrayList<String> collection = new ArrayList<String>(
+ Arrays.asList( "Hello", "World", null )
+ );
+ final FilterIterator<String> iterator = new FilterIterator<String>( collection );
+
+ assertTrue( iterator.hasNext() );
+ assertEquals( "Hello", iterator.next() );
+ assertTrue( iterator.hasNext() );
+ assertEquals( "World", iterator.next() );
+ assertFalse( iterator.hasNext() );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/FreeMarkerUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/FreeMarkerUtilTest.java
new file mode 100644
index 000000000..f1f27729a
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/FreeMarkerUtilTest.java
@@ -0,0 +1,62 @@
+package org.tizen.common.util;
+
+import static org.junit.Assert.*;
+
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.junit.Test;
+
+import freemarker.template.Configuration;
+import freemarker.template.DefaultObjectWrapper;
+import freemarker.template.Template;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.verify;
+
+
+public class FreeMarkerUtilTest {
+
+ /**
+ * Test {@link FreeMarkerUtil#getDefaultConfiguration()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FreeMarkerUtil#getDefaultConfiguration()
+ */
+ @Test
+ public void test_getDefaultConfiguration() throws Exception {
+ Configuration defaultConfiguration = FreeMarkerUtil.getDefaultConfiguration();
+
+ String encoding = defaultConfiguration.getEncoding(Locale.getDefault());
+ assertTrue(encoding.equals("8859_1"));
+
+ assertTrue(defaultConfiguration.getObjectWrapper() instanceof DefaultObjectWrapper);
+ }
+
+ /**
+ * Test {@link FreeMarkerUtil#generateDocument(Map, Configuration, String, Writer)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see FreeMarkerUtil#generateDocument(Map, Configuration, String, Writer)
+ */
+ @Test
+ public void test_generateDocument() throws Exception {
+ final String templateFile = "zz";
+ final Map<String, Object> root = new HashMap<String, Object>();
+ final Writer mockWriter = mock( Writer.class );
+
+ final Configuration mockCfg = mock (Configuration.class);
+ final Template mockTemplate = mock( Template.class );
+ when(mockCfg.getTemplate(templateFile)).thenReturn(mockTemplate);
+
+ FreeMarkerUtil.generateDocument(root, mockCfg, templateFile, mockWriter);
+ verify(mockCfg).getTemplate(templateFile);
+ verify(mockTemplate).process(root, mockWriter);
+ verify(mockWriter).close();
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/HostUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/HostUtilTest.java
new file mode 100644
index 000000000..1b81a55e1
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/HostUtilTest.java
@@ -0,0 +1,117 @@
+package org.tizen.common.util;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class HostUtilTest {
+
+ private String packageName = HostUtilTest.class.getPackage().getName().replace('.', '/');
+ private String fileName = "test";
+ private String filePath = ClassLoader.getSystemResource(packageName + '/').getPath();
+ private String fullPath = filePath + fileName;
+
+ @Before
+ public void setUp() {
+
+ }
+
+ @After
+ public void tearDown() {
+
+ }
+
+ /**
+ * Test {@link HostUtil#getContents( String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#getContents( String)
+ */
+ @Test
+ public void test_getContents() throws Exception {
+ Assert.notNull(HostUtil.getContents(fullPath));
+ Assert.isNull(HostUtil.getContents(null));
+ Assert.isNull(HostUtil.getContents("nullPath"));
+ }
+
+ /**
+ * Test {@link HostUtil#exists( String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#exists( String)
+ */
+ @Test
+ public void test_exists() throws Exception {
+ Assert.isTrue(HostUtil.exists(fullPath));
+ Assert.isFalse(HostUtil.exists(null));
+ Assert.isFalse(HostUtil.exists("nullPath"));
+ }
+
+ /**
+ * Test {@link HostUtil#execute( String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#execute( String)
+ */
+ @Test
+ public void test_execute() throws Exception {
+ Assert.isTrue(HostUtil.execute("cd"));
+ Assert.isFalse(HostUtil.execute(null));
+ Assert.isFalse(HostUtil.execute("notcommand"));
+ }
+
+ /**
+ * Test {@link HostUtil#batchExecute( String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#batchExecute( String)
+ */
+ @Test
+ public void test_batchExecute() throws Exception {
+ Assert.isFalse(HostUtil.batchExecute(null));
+ Assert.isTrue(HostUtil.batchExecute("cd"));
+ Assert.isFalse(HostUtil.batchExecute("notcommand"));
+ }
+
+ /**
+ * Test {@link HostUtil#returnExecute( String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#returnExecute( String)
+ */
+ @Test
+ public void test_returnExecute1() throws Exception {
+ Assert.isNull(HostUtil.returnExecute(null));
+ Assert.notNull(HostUtil.returnExecute("cd"));
+ }
+
+ /**
+ * Test {@link HostUtil#returnExecute( String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#returnExecute( String, String)
+ */
+ @Test
+ public void test_returnExecute2() throws Exception {
+ Assert.isNull(HostUtil.returnExecute(null, filePath));
+ Assert.notNull(HostUtil.returnExecute("cd", filePath));
+ }
+
+ /**
+ * Test {@link HostUtil#executeWithConsole( String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see HostUtil#executeWithConsole( String, String)
+ */
+ @Test(expected = Exception.class)
+ public void test_executeWithConsole() throws Exception {
+ HostUtil.executeWithConsole("notcommand", "viewname");
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/IOUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/IOUtilTest.java
new file mode 100644
index 000000000..4254e7f86
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/IOUtilTest.java
@@ -0,0 +1,242 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/package org.tizen.common.util;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
+import java.io.Flushable;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import org.junit.Test;
+
+
+/**
+ * IOUtilTest.
+ *
+ * Test case for {@link IOUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see IOUtil
+ *
+ */
+public class IOUtilTest
+{
+ /**
+ * Test {@link IOUtil#tryClose(Object...)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link IOUtil#tryClose(Object...)}
+ */
+ @Test
+ public
+ void
+ test_tryClose()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null },
+ new Object[] { new Closeable[] { new ByteArrayOutputStream(), new ByteArrayOutputStream() } },
+ new Object[] { new Closeable[] { null } },
+ new Object[] { new Closeable[] { null, null, null } },
+ new Object[] { new Closeable[] { null, new ByteArrayOutputStream() } },
+ new Object[] { new Closeable[] { new ByteArrayOutputStream(), null } },
+ new Object[] { new Closeable[] { new ByteArrayOutputStream(), null } },
+ new Object[] { new Closeable[] { new ByteArrayOutputStream(), null, new ByteArrayOutputStream() } },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+
+ try
+ {
+ IOUtil.tryClose( TEST_CASE[0] );
+ }
+ catch ( final Throwable e )
+ {
+ fail( iTestCase + " th test case failed" );
+ }
+ }
+
+ /* Mock Object using Mockito */
+ InputStream in = mock( InputStream.class );
+ IOUtil.tryClose( in );
+ verify( in ).close();
+ }
+
+ /**
+ * Test {@link IOUtil#tryFlush(Flushable...)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link IOUtil#tryFlush(Flushable...)}
+ */
+ @Test
+ public
+ void
+ test_tryFlush()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null },
+ new Object[] { new Flushable[] { new ByteArrayOutputStream(), new ByteArrayOutputStream() } },
+ new Object[] { new Flushable[] { null } },
+ new Object[] { new Flushable[] { null, null, null } },
+ new Object[] { new Flushable[] { null, new ByteArrayOutputStream() } },
+ new Object[] { new Flushable[] { new ByteArrayOutputStream(), null } },
+ new Object[] { new Flushable[] { new ByteArrayOutputStream(), null } },
+ new Object[] { new Flushable[] { new ByteArrayOutputStream(), null, new ByteArrayOutputStream() } },
+ };
+
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+ final Flushable[] flushables = (Flushable[]) TEST_CASE[0];
+
+ try
+ {
+ IOUtil.tryFlush( flushables );
+ }
+ catch ( final Throwable e )
+ {
+ fail( iTestCase + " th test case failed" );
+ }
+ }
+
+ /* Mock Object using Mockito */
+ OutputStream out = mock( OutputStream.class );
+ IOUtil.tryFlush( out );
+ verify( out ).flush();
+ }
+
+
+ /**
+ * Test {@link IOUtil#redirect(InputStream, OutputStream)},
+ * {@link IOUtil#redirect(java.io.Reader, StringBuffer)},
+ * {@link IOUtil#redirect(java.io.Reader, StringBuilder)}
+ * and {@link IOUtil#redirect(java.io.Reader, java.io.Writer)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see IOUtil#redirect(InputStream, OutputStream)
+ * @see IOUtil#redirect(java.io.Reader, StringBuffer)
+ * @see IOUtil#redirect(java.io.Reader, StringBuilder)
+ * @see IOUtil#redirect(java.io.Reader, java.io.Writer)
+ */
+ @Test
+ public
+ void
+ test_redirect()
+ throws Exception
+ {
+ final String[] TEST_CASES = new String[] {
+ "Hello, World",
+ };
+
+ int iTestCase = 0;
+ for ( final String TEST_CASE : TEST_CASES )
+ {
+ ++iTestCase;
+
+ final ByteArrayInputStream in = new ByteArrayInputStream( TEST_CASE.getBytes() );
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ IOUtil.redirect( in, out );
+ assertArrayEquals( iTestCase + " th test case failed :" + TEST_CASE, TEST_CASE.getBytes(), out.toByteArray() );
+
+ final StringReader reader = new StringReader( TEST_CASE );
+ final StringWriter writer = new StringWriter();
+ IOUtil.redirect( reader, writer );
+ assertEquals( iTestCase + " th test case failed :" + TEST_CASE, TEST_CASE, writer.toString() );
+
+ final StringReader reader2 = new StringReader( TEST_CASE );
+ final StringBuilder builder = new StringBuilder();
+ IOUtil.redirect( reader2, builder );
+ assertEquals( iTestCase + " th test case failed :" + TEST_CASE, TEST_CASE, builder.toString() );
+
+ final StringReader reader3 = new StringReader( TEST_CASE );
+ final StringBuffer buffer = new StringBuffer();
+ IOUtil.redirect( reader3, buffer );
+ assertEquals( iTestCase + " th test case failed :" + TEST_CASE, TEST_CASE, buffer.toString() );
+
+ }
+ }
+
+ /**
+ * Test {@link IOUtil#getBytes(InputStream)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see IOUtil#getBytes(InputStream)
+ */
+ @Test
+ public
+ void
+ test_getBytes()
+ throws Exception
+ {
+ assertNotNull( IOUtil.getBytes( new ByteArrayInputStream( "Hello".getBytes() ) ) );
+ assertTrue( 0 < IOUtil.getBytes( new ByteArrayInputStream( "Hello".getBytes() ) ).length );
+ }
+
+
+ /**
+ * Test {@link IOUtil#getString(java.io.Reader)},
+ * {@link IOUtil#getString(java.io.Reader, boolean)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see IOUtil#getString(java.io.Reader)
+ * @see IOUtil#getString(java.io.Reader, boolean)
+ */
+ @Test
+ public
+ void
+ test_getString()
+ throws Exception
+ {
+ assertEquals( "", IOUtil.getString( (Reader) null ) );
+ assertEquals( "Hello", IOUtil.getString( new StringReader("Hello" ) ) );
+
+ assertEquals( "", IOUtil.getString( (StringReader) null, true ) );
+ assertEquals( "Hello", IOUtil.getString( new StringReader("Hello" ), true ) );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.java
new file mode 100644
index 000000000..5894536fc
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.java
@@ -0,0 +1,276 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.osgi.framework.Bundle;
+import org.tizen.common.SurrogateWithArgument;
+
+
+/**
+ * ImageUtilTest
+ *
+ * Test case for {@link ImageUtil}
+ *
+ * LookAtMe : "SetUp" & "TearDown" pattern for test
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see ImageUtil
+ */
+public class ImageUtilTest
+{
+ /**
+ * Property key for URL handler
+ */
+ protected static final String PROP_PKG = "java.protocol.handler.pkgs";
+
+ protected static final String TEST_PATH = ImageUtilTest.class.getSimpleName() + ".png";
+ protected static final String TEST_URL = "cp:///" + TEST_PATH;
+
+ /**
+ * Old property value for URL handler
+ */
+ protected String oldConfig;
+
+ /**
+ * Set up URL handler before test
+ */
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp()
+ {
+ oldConfig = System.getProperty( PROP_PKG );
+ System.setProperty( PROP_PKG, "org.tizen.common.util.url" );
+
+ ImageUtil.platformSurrogate = mock(SurrogateWithArgument.class);
+ ImageUtil.pluginSurrogate = mock(SurrogateWithArgument.class);
+
+ }
+
+ /**
+ * Restore URL handler after test
+ */
+ @After
+ public void tearDown()
+ {
+ ImageUtil.pluginSurrogate = null;
+ ImageUtil.platformSurrogate = null;
+
+ if ( null == oldConfig )
+ {
+ System.getProperties().remove( PROP_PKG );
+ return ;
+ }
+ System.setProperty( PROP_PKG, oldConfig );
+ }
+
+ /**
+ * Test {@link ImageUtil#getImageDescriptor(Bundle, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImageDescriptor(Bundle, String)
+ */
+ @Test
+ public
+ void
+ test_getImageDescriptor1()
+ throws Exception
+ {
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ final ImageDescriptor imgDes =
+ ImageUtil.getImageDescriptor( bundleMockup, TEST_PATH );
+
+ Assert.assertNotNull(imgDes.createImage(false));
+ }
+
+ /**
+ * Test {@link ImageUtil#getImageDescriptor(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImageDescriptor(String, String)
+ */
+ @Test
+ public void test_getImageDescriptor2() throws Exception {
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ final String pluginID = "testID";
+ when(ImageUtil.platformSurrogate.getAdapter(pluginID)).thenReturn(bundleMockup);
+ final ImageDescriptor imgDes = ImageUtil.getImageDescriptor(pluginID, TEST_PATH);
+
+ final Image img = imgDes.createImage(false);
+
+ Assert.assertNotNull(img);
+ }
+
+ /**
+ * Test {@link ImageUtil#getImageDescriptor(Plugin, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImageDescriptor(Plugin, String)
+ */
+ @Test
+ public void test_getImageDescriptor3() throws Exception {
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ final Plugin pluginMockup = mock(Plugin.class);
+ when(ImageUtil.pluginSurrogate.getAdapter(pluginMockup)).thenReturn(bundleMockup);
+ final ImageDescriptor imgDes = ImageUtil.getImageDescriptor(pluginMockup, TEST_PATH);
+ final Image img = imgDes.createImage(false);
+
+ Assert.assertNotNull(img);
+ }
+
+ /**
+ * Test {@link ImageUtil#getImage(ImageDescriptor)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImage(ImageDescriptor)
+ */
+ @Test
+ public void test_getImage1() throws Exception {
+ final ImageDescriptor imgMock = mock(ImageDescriptor.class);
+
+ ImageUtil.getImage(imgMock);
+ Mockito.verify(imgMock).createImage();
+ }
+
+ /**
+ * Test {@link ImageUtil#getImageData(ImageDescriptor)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImageData(ImageDescriptor)
+ */
+ @Test
+ public void test_getImageData1() throws Exception {
+ final ImageDescriptor imgMock = mock(ImageDescriptor.class);
+
+ ImageUtil.getImageData(imgMock);
+ Mockito.verify(imgMock).getImageData();
+ }
+
+ /**
+ * Test {@link ImageUtil#getImage(Plugin, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImage(Plugin, String)
+ */
+ @Test
+ public void test_getImage2() throws Exception {
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ final Plugin pluginMockup = mock(Plugin.class);
+ when(ImageUtil.pluginSurrogate.getAdapter(pluginMockup)).thenReturn(bundleMockup);
+
+ Image img = ImageUtil.getImage(pluginMockup, TEST_PATH);
+
+ Assert.assertNotNull(img);
+ }
+
+ /**
+ * Test {@link ImageUtil#getImageData(Plugin, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImageData(Plugin, String)
+ */
+ @Test
+ public void test_getImageData2() throws Exception {
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ final Plugin pluginMockup = mock(Plugin.class);
+ when(ImageUtil.pluginSurrogate.getAdapter(pluginMockup)).thenReturn(bundleMockup);
+
+ ImageData imgData = ImageUtil.getImageData(pluginMockup, TEST_PATH);
+
+ Assert.assertNotNull( imgData );
+ }
+
+ /**
+ * Test {@link ImageUtil#getImage(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImage(String, String)
+ */
+ @Test
+ public void test_getImage3() throws Exception {
+ final String pluginID = "testID";
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ when(ImageUtil.platformSurrogate.getAdapter(pluginID)).thenReturn(bundleMockup);
+
+ Image img = ImageUtil.getImage(pluginID, TEST_PATH);
+
+ Assert.assertNotNull(img);
+ }
+
+ /**
+ * Test {@link ImageUtil#getImageData(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ImageUtil#getImageData(String, String)
+ */
+ @Test
+ public void test_getImageData3() throws Exception {
+ final String pluginID = "testID";
+ final Bundle bundleMockup = mock( Bundle.class );
+ final URL virtualPathUrl = new URL( TEST_URL );
+ when( bundleMockup.getEntry( TEST_PATH ) ).thenReturn( virtualPathUrl );
+ when(ImageUtil.platformSurrogate.getAdapter(pluginID)).thenReturn(bundleMockup);
+
+ ImageData imgData = ImageUtil.getImageData(pluginID, TEST_PATH);
+ Assert.assertNotNull( imgData );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.png b/org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.png
new file mode 100644
index 000000000..d70328403
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ImageUtilTest.png
Binary files differ
diff --git a/org.tizen.common/test/src/org/tizen/common/util/LocalPortCheckerTest.java b/org.tizen.common/test/src/org/tizen/common/util/LocalPortCheckerTest.java
new file mode 100644
index 000000000..549e8e750
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/LocalPortCheckerTest.java
@@ -0,0 +1,105 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Random;
+
+import org.junit.Test;
+
+
+/**
+ * LocalPortCheckerTest
+ *
+ * Test case for {@link LocalPortChecker}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see LocalPortChecker
+ */
+public class LocalPortCheckerTest
+{
+
+ /**
+ * Test {@link LocalPortChecker#isPortInRange(int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see LocalPortChecker#isPortInRange(int)
+ */
+ @Test
+ public void test_isPortInRange() throws Exception
+ {
+ for ( int i = 0 ; i < 65536 ; ++i )
+ {
+ assertTrue( LocalPortChecker.isPortInRange( i ) );
+ }
+ assertFalse( LocalPortChecker.isPortInRange( -1 ) );
+ assertFalse( LocalPortChecker.isPortInRange( 65536 ) );
+ }
+
+ /**
+ * Test {@link LocalPortChecker#isPortAvailable(int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see LocalPortChecker#isPortAvailable(int)
+ */
+ @Test
+ public void test_isPortAvailable() throws Exception
+ {
+ assertFalse( LocalPortChecker.isPortAvailable( -1 ) );
+ assertTrue( LocalPortChecker.isPortAvailable( 0 ) );
+ assertFalse( LocalPortChecker.isPortAvailable( 65538 ) );
+ }
+
+ /**
+ * Test {@link LocalPortChecker#getAvailableLocalPort(int, int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see LocalPortChecker#getAvailableLocalPort(int, int)
+ */
+ @Test
+ public void test_getAvailableLocalPort() throws Exception
+ {
+ final Random r = new Random( System.currentTimeMillis() );
+ final int MIN = 10000;
+ final int MAX = 65535;
+
+ for ( int i = 0 ; i < 1000 ; ++i )
+ {
+ final int basePort = r.nextInt( MAX - MIN ) + MIN;
+ final int inc = r.nextInt( 5 ) - 2;
+
+ int port = LocalPortChecker.getAvailableLocalPort( inc, basePort );
+ assertEquals( "base port :" + basePort + ", inc :" + inc + ", real port :" + port, ( basePort == port ), LocalPortChecker.isPortAvailable( basePort ) );
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/MapUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/MapUtilTest.java
new file mode 100644
index 000000000..58feb4b77
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/MapUtilTest.java
@@ -0,0 +1,205 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* ChangHyun Lee <changhyun1.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import org.junit.Test;
+
+
+/**
+ * MapUtilTest.
+ *
+ * Test case for {@link MapUtil}
+ *
+ * @author Changhyun Lee{@literal <changhyun1.lee@samsung.com>} (S-Core)
+ *
+ * @see MapUtil
+ *
+ */
+public class MapUtilTest {
+ /**
+ * Test {@link MapUtil#length(Map)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see MapUtil#length(Map)
+ */
+ @Test
+ public void test_length() throws Exception {
+ assertEquals(0, MapUtil.length(null));
+ Map<String, String> map = new HashMap<String, String>();
+ map.put("aaa", "111");
+ map.put("bbb", "222");
+ assertEquals(map.size(), MapUtil.length(map));
+ }
+
+ /**
+ * Test {@link MapUtil#isEmpty(Map)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see MapUtil#isEmpty(Map)
+ */
+ @Test
+ public void test_isEmpty() throws Exception {
+ assertTrue(MapUtil.isEmpty(null));
+
+ Map<String, String> map = new HashMap<String, String>();
+ assertTrue(MapUtil.isEmpty(map));
+
+ map.put("aaa", "111");
+ map.put("bbb", "222");
+ assertFalse(MapUtil.isEmpty(map));
+ }
+
+ /**
+ * Test {@link MapUtil#asMap(Object[], Object[])
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see MapUtil#asMap(Object[], Object[])
+ */
+ @Test
+ public void test_asMap1() throws Exception {
+ String[] keys = {"aaa", "bbb", "ccc"};
+ String[] values = {"111", "222", "333"};
+ String[] values2 = {"111", "222"};
+
+ assertTrue(MapUtil.asMap(null, null) != null);
+ assertTrue(MapUtil.asMap(keys, null) != null);
+ assertTrue(MapUtil.asMap(null, values) != null);
+
+ Map<String, String> map1 = MapUtil.asMap(keys, values);
+ assertEquals(map1.size(), 3);
+ Map<String, String> map2 = MapUtil.asMap(keys, values2);
+ assertEquals(map2.size(), 2);
+ Map<String, String> map3 = MapUtil.asMap(null, null);
+ assertEquals(map3.size(), 0);
+ }
+
+ /**
+ * Test {@link MapUtil#asMap(Object[][] objs)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link MapUtil#asMap(Object[][] objs)}
+ */
+ @Test
+ public void test_asMap2() throws Exception {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "aaa", "111" },
+ new Object[] { "bbb", "222" },
+ };
+
+ final Object[][] TEST_CASES2 = new Object[][] {
+ new Object[] {"aaa"},
+ new Object[] {null},
+ new Object[] { "aaa", "111" },
+ new Object[] { "bbb", "222" },
+ };
+
+ assertTrue(MapUtil.asMap(null) != null);
+
+ Map<Object, Object> map1 = MapUtil.asMap(TEST_CASES);
+ assertTrue(map1 != null);
+ assertEquals(map1.size(), 2);
+ int iTestCase = 0;
+ for ( final Object[] TEST_CASE : TEST_CASES ) {
+ ++iTestCase;
+ final Object[] object = TEST_CASE;
+ assertEquals(iTestCase + " th test case", object[1], map1.get(object[0]));
+ }
+
+ Map<Object, Object> map2 = MapUtil.asMap(TEST_CASES2);
+ assertTrue(map2 != null);
+ assertEquals(map2.size(), 2);
+ }
+
+ /**
+ * Test {@link MapUtil#mergePropertiesIntoMap(Properties, Map)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see MapUtil#mergePropertiesIntoMap(Properties, Map)
+ */
+ @Test
+ public void test_mergePropertiesIntoMap() throws Exception {
+ Properties properties = new Properties();
+ properties.setProperty("aaa", "111");
+ properties.setProperty("bbb", "222");
+
+ HashMap<Object, Object> map = new HashMap<Object, Object>();
+
+ try {
+ MapUtil.mergePropertiesIntoMap(null, null);
+ fail( "mergePropertiesIntoMap must throw exception" );
+ } catch (Exception e) {
+ }
+
+ try {
+ MapUtil.mergePropertiesIntoMap(properties, null);
+ fail( "mergePropertiesIntoMap must throw exception" );
+ } catch (Exception e) {
+ }
+
+ MapUtil.mergePropertiesIntoMap(null, map);
+
+ assertEquals(map.size(), 0);
+ MapUtil.mergePropertiesIntoMap(properties, map);
+ assertEquals(map.size(), 2);
+ assertEquals(properties.getProperty("aaa"), map.get("aaa"));
+ assertEquals(properties.getProperty("bbb"), map.get("bbb"));
+ }
+
+ /**
+ * Test {@link MapUtil#toString(Map)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see MapUtil#toString(Map)
+ */
+ @Test
+ public void test_toString() throws Exception {
+ final Map<String, String> testTarget = new HashMap<String, String>();
+ testTarget.put( "testKey", "testValue" );
+
+ final String string = MapUtil.toString( testTarget );
+
+ assertTrue( string.contains( "testKey" ) );
+ assertTrue( string.contains( "testValue" ) );
+
+ assertNotNull( MapUtil.toString( null ) );
+ }
+}
diff --git a/org.tizen.common/src/org/tizen/common/control/NotSupportedTypeException.java b/org.tizen.common/test/src/org/tizen/common/util/MockRunner.java
index 64cfa87c8..a4d73ade0 100644
--- a/org.tizen.common/src/org/tizen/common/control/NotSupportedTypeException.java
+++ b/org.tizen.common/test/src/org/tizen/common/util/MockRunner.java
@@ -4,7 +4,7 @@
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
-* Kangho Kim <kh5325.kim@samsung.com>
+* BonYong Lee <bonyong.lee@samsung.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,14 +22,25 @@
* - S-Core Co., Ltd
*
*/
-package org.tizen.common.control;
+package org.tizen.common.util;
-public class NotSupportedTypeException extends Exception {
+/**
+ * MockRunner
+ *
+ * Mock object for {@link Runnable}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ */
+public class
+MockRunner
+implements Runnable
+{
+
+ boolean bExecute = false;
- public NotSupportedTypeException(){
- super();
- }
- public NotSupportedTypeException(String message){
- super(message);
+ public void run() {
+ ThreadUtil.trySleep( 50 );
+ bExecute = true;
}
+
}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ObjectUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/ObjectUtilTest.java
new file mode 100644
index 000000000..23c40ecdb
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ObjectUtilTest.java
@@ -0,0 +1,140 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ * TaeYoung son <taeyoung2.son@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * ObjectUtilTest.
+ *
+ * Helper related to {@link ObjectUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ * @author TaeYoung Son{@literal <taeyoung2.son@samsung.com>} (S-Core)
+ *
+ * @see ObjectUtil
+ *
+ */
+public class ObjectUtilTest {
+ @Test
+ public void test_nvl() throws Exception {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null },
+ new Object[] { new Object[] { null }, null },
+ new Object[] { new Object[] { "hello" }, "hello" },
+ new Object[] { new Object[] { null, null, "b" }, "b" },
+ new Object[] { new Object[] { null, "a", "b" }, "a" } };
+
+ int nTestCase = 0;
+ for (final Object[] TEST_CASE : TEST_CASES) {
+ nTestCase++;
+ final Object[] input = (Object[]) TEST_CASE[0];
+ final Object expected = TEST_CASE[1];
+
+ assertEquals(nTestCase + "th test case failed." + "\n input : "
+ + input + "\n", expected, ObjectUtil.nvl(input));
+ }
+ }
+
+ @Test
+ public void test_equals() {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, null, true },
+ new Object[] { null, "a", false },
+ new Object[] { "a", null, false },
+ new Object[] { "a", "a", true },
+ new Object[] { "a", new String("a"), true },
+ new Object[] { "a", "b", false },
+ new Object[] { new char[] { 'a', 'a', 'b' },
+ new char[] { 'a', 'a', 'b' }, true },
+ new Object[] { new int[] { 1, 2, 3 }, new int[] { 1, 3, 2 },
+ false } };
+
+ int nTestCase = 0;
+ for (final Object[] TEST_CASE : TEST_CASES) {
+ nTestCase++;
+ final Object input1 = (Object) TEST_CASE[0];
+ final Object input2 = (Object) TEST_CASE[1];
+ final Object expected = TEST_CASE[2];
+ assertEquals(nTestCase + "th test case failed."
+ + "\n first input : " + input1 + "\n" + "second input : "
+ + input2 + "\n", expected,
+ ObjectUtil.equals(input1, input2));
+ }
+ }
+
+ @Test
+ public void test_hexFormat() {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { 0, 0, "0" },
+ new Object[] { 0, 2, "00" },
+ new Object[] { 15, 1, "f" },
+ new Object[] { 15, 3, "00f" },
+ new Object[] { 2147483647, 10, "007fffffff" },
+ new Object[] { -2147483647, 10, "0080000001" },
+ new Object[] { -1, 1, "ffffffff" }
+ };
+
+ int nTestCase = 0;
+ for (final Object[] TEST_CASE : TEST_CASES) {
+ nTestCase++;
+ final Object input1 = TEST_CASE[0];
+ final Object input2 = TEST_CASE[1];
+ final Object expected = TEST_CASE[2];
+
+ assertEquals(nTestCase + "th test case failed."
+ + "\n first input : " + input1.toString() + "\n" + "second input : "
+ + input2.toString() + "\n", (String)expected,
+ ObjectUtil.hexFormat((Integer)input1, ((Integer)input2).intValue()));
+ }
+
+ }
+
+ @Test
+ public void test_toString() {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, "<<null>>" },
+ new Object[] { "null", "String@C587" },
+ new Object[] { "a", "String@0061" },
+ new Object[] { "A", "String@0041" },
+ new Object[] { 1, "Integer@0001" },
+ new Object[] { 10, "Integer@000A" },
+ new Object[] { -1, "Integer@FFFF" },
+ };
+
+ int nTestCase = 0;
+ for (final Object[] TEST_CASE : TEST_CASES) {
+ nTestCase++;
+ final Object input = TEST_CASE[0];
+ final Object expected = TEST_CASE[1];
+
+ assertEquals(nTestCase + "th test case failed." + "\n input : "
+ + input + "\n", expected, ObjectUtil.toString(input));
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ParsingUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/ParsingUtilTest.java
new file mode 100644
index 000000000..f456715df
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ParsingUtilTest.java
@@ -0,0 +1,108 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+
+/**
+ * ParsingUtilTest
+ *
+ * Test case for {@link ParsingUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see ParsingUtil
+ */
+public class ParsingUtilTest
+{
+ /**
+ * Test {@link ParsingUtil#parseBoolean(String, boolean)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ParsingUtil#parseBoolean(String, boolean)
+ */
+ @Test
+ public void test_parseBoolean() throws Exception
+ {
+ assertEquals( true, ParsingUtil.parseBoolean( "true", false ) );
+ assertEquals( false, ParsingUtil.parseBoolean( null, false ) );
+ assertEquals( true, ParsingUtil.parseBoolean( null, true ) );
+ assertEquals( false, ParsingUtil.parseBoolean( "xxxx", false ) );
+ assertEquals( true, ParsingUtil.parseBoolean( "xxxx", true ) );
+ assertEquals( true, ParsingUtil.parseBoolean( "Y", false ) );
+ assertEquals( true, ParsingUtil.parseBoolean( "1", false ) );
+ }
+
+ /**
+ * Test {@link ParsingUtil#parseInt(String, int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ParsingUtil#parseInt(String, int)
+ */
+ @Test
+ public void test_parseInt() throws Exception
+ {
+ assertEquals( 3, ParsingUtil.parseInt( "3", 0 ) );
+ assertEquals( 2, ParsingUtil.parseInt( "2", 0 ) );
+ assertEquals( 16, ParsingUtil.parseInt( "0x10", 0 ) );
+ assertEquals( 8, ParsingUtil.parseInt( "010", 0 ) );
+ }
+
+ /**
+ * Test {@link ParsingUtil#parseLong(String, long)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ParsingUtil#parseLong(String, long)
+ */
+ @Test
+ public void test_parseLong() throws Exception
+ {
+ assertEquals( 3, ParsingUtil.parseLong( "3", 0 ) );
+ assertEquals( 2, ParsingUtil.parseLong( "2", 0 ) );
+ assertEquals( 16, ParsingUtil.parseLong( "0x10", 0 ) );
+ assertEquals( 8, ParsingUtil.parseLong( "010", 0 ) );
+ }
+
+ /**
+ * Test {@link ParsingUtil#parseDouble(String, double)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see ParsingUtil#parseDouble(String, double)
+ */
+ @Test
+ public void test_parseDouble() throws Exception
+ {
+ assertEquals( 3.0, ParsingUtil.parseDouble( "3", 0 ), 0 );
+ assertEquals( 2.0, ParsingUtil.parseDouble( "2", 0 ), 0 );
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/PluginUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/PluginUtilTest.java
new file mode 100644
index 000000000..5c1f6ee78
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/PluginUtilTest.java
@@ -0,0 +1,111 @@
+package org.tizen.common.util;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.tizen.common.Surrogate;
+
+/**
+ * PluginUtilTest.
+ *
+ * Test case for {@link PluginUtil}
+ *
+ * @author Ho Namkoong{@literal <ho.namkoong@samsung.com>} (S-Core)
+ *
+ * @see PluginUtil
+ */
+public class PluginUtilTest {
+
+ /**
+ * mock up test extension point id
+ */
+ private static final String TEST_EXT_ID = "test-ep";
+
+ /**
+ * mock up test class id
+ */
+ private static final String TEST_CLS_ID = "test-class";
+
+ @SuppressWarnings("unchecked")
+ @Before
+ public void setUp() throws Exception {
+ PluginUtil.platformSurrogate = mock(Surrogate.class);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ PluginUtil.platformSurrogate = null;
+ }
+
+ /**
+ * Test {@link PluginUtil#loadClasses(String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see PluginUtil#loadClasses(String)
+ */
+ @Test
+ public void testLoadClasses() throws Exception {
+
+ final IExtensionRegistry registry = mock(IExtensionRegistry.class);
+ when(PluginUtil.platformSurrogate.getAdapter()).thenReturn(registry);
+
+ final IExtensionPoint ep = mock(IExtensionPoint.class);
+ when(registry.getExtensionPoint(TEST_EXT_ID)).thenReturn(ep);
+
+ IExtension[] exts = new IExtension[1];
+ when(ep.getExtensions()).thenReturn(exts);
+
+ final IExtension ext = mock(IExtension.class);
+ exts[0] = ext;
+
+ final IConfigurationElement config = mock(IConfigurationElement.class);
+ final IConfigurationElement[] configs = new IConfigurationElement[1];
+ when(ext.getConfigurationElements()).thenReturn(configs);
+ configs[0] = config;
+
+ PluginUtil.loadClasses(TEST_EXT_ID);
+ Mockito.verify(config).createExecutableExtension("class");
+ }
+
+ /**
+ * Test {@link PluginUtil#loadClass(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see PluginUtil#loadClass(String, String)
+ */
+ @Test
+ public void testLoadClass() throws Exception {
+
+ final IExtensionRegistry registry = mock(IExtensionRegistry.class);
+ when(PluginUtil.platformSurrogate.getAdapter()).thenReturn(registry);
+
+ final IExtensionPoint ep = mock(IExtensionPoint.class);
+ when(registry.getExtensionPoint(TEST_EXT_ID)).thenReturn(ep);
+
+ IExtension[] exts = new IExtension[1];
+ when(ep.getExtensions()).thenReturn(exts);
+
+ final IExtension ext = mock(IExtension.class);
+ exts[0] = ext;
+
+ final IConfigurationElement config = mock(IConfigurationElement.class);
+ when(config.getAttribute("id")).thenReturn(TEST_CLS_ID);
+ final IConfigurationElement[] configs = new IConfigurationElement[1];
+ when(ext.getConfigurationElements()).thenReturn(configs);
+ configs[0] = config;
+
+ PluginUtil.loadClass(TEST_EXT_ID, TEST_CLS_ID);
+ Mockito.verify(config).createExecutableExtension("class");
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/SWTUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/SWTUtilTest.java
new file mode 100644
index 000000000..bf3cce3b1
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/SWTUtilTest.java
@@ -0,0 +1,123 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.swt.widgets.Display;
+import org.junit.Test;
+
+
+
+/**
+ * SWTUtilTest.
+ *
+ * Test case for {@link SWTUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see SWTUtil
+ */
+public class SWTUtilTest
+{
+ /**
+ * Test {@link SWTUtil#getDisplay()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link SWTUtil#getDisplay()}
+ */
+ @Test
+ public void test_getDisplay() throws Exception {
+ Display dp = SWTUtil.getDisplay();
+ assertNotNull( dp );
+ dp.dispose();
+ }
+
+ /**
+ * Test {@link SWTUtil#asynExec()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link SWTUtil#asynExec()}
+ */
+ @Test
+ public void test_asynExec() throws Exception {
+ MockRunner runnable = new MockRunner();
+ assertFalse( runnable.bExecute );
+ Display dp = SWTUtil.getDisplay();
+ SWTUtil.asyncExec( dp, runnable );
+ assertFalse( runnable.bExecute );
+
+ long start = System.currentTimeMillis();
+ while ( !runnable.bExecute && (System.currentTimeMillis() - start) < 100 )
+ {
+ if ( !dp.readAndDispatch() )
+ {
+ dp.sleep();
+ }
+ }
+ assertTrue( runnable.bExecute );
+ }
+
+ /**
+ * Test {@link SWTUtil#isHtmlFile()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link SWTUtil#isHtmlFile()}
+ */
+ @Test
+ public void test_isHtmlFile() throws Exception {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "aaaa.exe", false },
+ new Object[] { "index.html", true },
+ new Object[] { "index.test.html", true },
+ new Object[] { "index..html", true },
+ new Object[] { ".profile", false },
+ new Object[] { "ReadMe ", false },
+ new Object[] { "ReadMe", false },
+ new Object[] { "ReadMe. ", false },
+ new Object[] { "ReadMe. test", false }
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String fileName = (String) TEST_CASE[0];
+ final boolean expected = (Boolean) TEST_CASE[1];
+
+
+ /*
+ * LookAtMe : Attach title when looping test case
+ */
+ assertEquals( "input :" + fileName, expected, SWTUtil.isHtmlFile( fileName ) );
+ }
+
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/StringUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/StringUtilTest.java
new file mode 100644
index 000000000..e95191c9f
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/StringUtilTest.java
@@ -0,0 +1,459 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * StringUtilTest
+ *
+ * Test case for {@link StringUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see StringUtil
+ */
+public class
+StringUtilTest
+{
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see StringUtil#nvl(String...)
+ */
+ @Test
+ public
+ void
+ test_nvl()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "", new String[] { null, null } },
+ new Object[] { "Hello", new String[] { "Hello", "World" } },
+ new Object[] { "World", new String[] { null, "World" } },
+ new Object[] { "hello", new String[] { null, "hello" } },
+ new Object[] { "hello", new String[] { "hello", "world" } },
+ new Object[] { "hello", new String[] { null, null, "hello", "world" } },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String expected = (String) TEST_CASE[0];
+ final String[] input = (String[]) TEST_CASE[1];
+ assertEquals( expected, StringUtil.nvl( input ) );
+ }
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#trimLeadingWhitespace(String)}
+ */
+ @Test
+ public void
+ test_trimLeadingWhitespace()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "", "" },
+ new Object[] { "", " " },
+ new Object[] { null, null },
+ new Object[] { "Hello", " Hello" },
+ new Object[] { "H ", " H " },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String expected = (String) TEST_CASE[0];
+ final String input = (String) TEST_CASE[1];
+ assertEquals( expected, StringUtil.trimLeading( input ) );
+ }
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#trimLeadingWhitespace(String)}
+ */
+ @Test
+ public void
+ test_trimTrailingWhitespace()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "", "" },
+ new Object[] { "", " " },
+ new Object[] { null, null },
+ new Object[] { "Hello", "Hello " },
+ new Object[] { " H", " H " },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String expected = (String) TEST_CASE[0];
+ final String input = (String) TEST_CASE[1];
+ assertEquals( expected, StringUtil.trimTrailing( input ) );
+ }
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#trimLeadingCharacter(String, char)}
+ */
+ @Test
+ public void
+ test_trimLeadingCharacter()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "", "", '-' },
+ new Object[] { " ", " ", '-' },
+ new Object[] { null, null, '-' },
+ new Object[] { "Hello ", "---Hello ", '-' },
+ new Object[] { " H ", " H ", '-' },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String expected = (String) TEST_CASE[0];
+ final String input = (String) TEST_CASE[1];
+ final char trimChar = (Character) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.trimLeadingCharacter( input, trimChar )
+ );
+ }
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#trimTrailingCharacter(String, char)
+ */
+ @Test
+ public void
+ test_trimTrailingCharacter()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "", "", '-' },
+ new Object[] { " ", " ", '-' },
+ new Object[] { null, null, '-' },
+ new Object[] { "Hello", "Hello---", '-' },
+ new Object[] { " H-- ", " H-- ", '-' },
+ new Object[] { " H", " H--", '-' },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String expected = (String) TEST_CASE[0];
+ final String input = (String) TEST_CASE[1];
+ final char trimChar = (Character) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.trimTrailingCharacter( input, trimChar )
+ );
+ }
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#trimCharacter(String, char)}
+ */
+ @Test
+ public
+ void
+ test_trimCharacter()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "", "", '-' },
+ new Object[] { " ", " ", '-' },
+ new Object[] { null, null, '-' },
+ new Object[] { "Hello", "Hello---", '-' },
+ new Object[] { " H-- ", " H-- ", '-' },
+ new Object[] { " H", " H--", '-' },
+ new Object[] { " H", "-- H--", '-' },
+ new Object[] { "H", "--H--", '-' },
+ new Object[] { " - H", "-- - H--", '-' },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String expected = (String) TEST_CASE[0];
+ final String input = (String) TEST_CASE[1];
+ final char trimChar = (Character) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.trimCharacter( input, trimChar )
+ );
+ }
+
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see StringUtil#getWord(String, int)
+ */
+ @Test
+ public void
+ test_getWord()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "I am a boy", 0, "I" },
+ new Object[] { "I am a boy", 1, "I" },
+ new Object[] { "I am a boy", 2, "am" },
+ new Object[] { "I am a boy", 3, "am" },
+ new Object[] { "I am a boy", 4, "am" },
+ new Object[] { "I am a boy", 5, "a" },
+ new Object[] { "I am a boy", 6, "a" },
+ new Object[] { "I am a boy", 7, "boy" },
+ new Object[] { "I am a boy", 8, "boy" },
+ new Object[] { "I am a boy", 9, "boy" },
+ new Object[] { "I am a boy", 10, "boy" },
+ new Object[] { "I am a boy", 11, "" },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String doc = (String) TEST_CASE[0];
+ final int index = (Integer) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.getWord( doc, index )
+ );
+ }
+ }
+
+ /**
+ * @throws Exception in case of failure in test
+ *
+ * @see StringUtil#getPreviousWord(String, int)
+ */
+ @Test
+ public void
+ test_getPreviousWord()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "I am a boy ", 0, "" },
+ new Object[] { "I am a boy ", 1, "I" },
+ new Object[] { "I am a boy ", 2, "" },
+ new Object[] { "I am a boy ", 3, "a" },
+ new Object[] { "I am a boy ", 4, "am" },
+ new Object[] { "I am a boy ", 5, "" },
+ new Object[] { "I am a boy ", 6, "a" },
+ new Object[] { "I am a boy ", 7, "" },
+ new Object[] { "I am a boy ", 8, "b" },
+ new Object[] { "I am a boy ", 9, "bo" },
+ new Object[] { "I am a boy ", 10, "boy" },
+ new Object[] { "I am a boy ", 11, "" },
+ new Object[] { "I am a boy ", 12, "" },
+ new Object[] { "#{\ntest", 2, "#{" },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String doc = (String) TEST_CASE[0];
+ final int index = (Integer) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.getPreviousWord( doc, index )
+ );
+ }
+ }
+
+ /**
+ * Test {@link StringUtil#getLastSegment(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#getLastSegment(String, String)}
+ */
+ @Test
+ public
+ void
+ test_getLastSegement()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, " ", "" },
+ new Object[] { "I am a boy", " ", "boy" },
+ new Object[] { "I am a boy", " ", "boy" },
+ new Object[] { "I am a boy ", " ", "" },
+ new Object[] { "a,b,c,d", ",", "d" },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String doc = (String) TEST_CASE[0];
+ final String separator = (String) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.getLastSegment( doc, separator )
+ );
+ }
+ }
+
+ /**
+ * Test {@link StringUtil#getLastSegment(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#getLastSegment(String, String)}
+ */
+ @Test
+ public
+ void
+ test_removeLastSegement()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { null, " ", "" },
+ new Object[] { "I am a boy", " ", "I am a" },
+ new Object[] { "I am a boy", " ", "I am a " }, // FIXME ?
+ new Object[] { "I am a boy ", " ", "I am a boy" },
+ new Object[] { "a,b,c,d", ",", "a,b,c" },
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String doc = (String) TEST_CASE[0];
+ final String separator = (String) TEST_CASE[1];
+ final String expected = (String) TEST_CASE[2];
+ assertEquals(
+ expected,
+ StringUtil.removeLastSegment( doc, separator )
+ );
+ }
+ }
+
+ /**
+ * Test {@link StringUtil#split(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#split(String, String)}
+ */
+ @Test
+ public
+ void
+ test_split()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { "aa.bbb.ccc", ".", new String[] { "aa", "bbb", "ccc" } }
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final String input = (String) TEST_CASE[0];
+ final String delimiters = (String) TEST_CASE[1];
+ final String[] expected = (String[]) TEST_CASE[2];
+
+ assertArrayEquals( expected, StringUtil.split( input, delimiters ) );
+ }
+ }
+
+ /**
+ * Test {@link StringUtil#enumNameToStringArray(T[] values)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#enumNameToStringArray(T[] values)}
+ */
+ @Test
+ public void test_enumNameToStringArray() throws Exception {
+ TestEnumCase [] enums = TestEnumCase.values();
+ String [] values = StringUtil.enumNameToStringArray(enums);
+ assertTrue(enums.length == values.length);
+
+ StringBuilder enumBuilder = new StringBuilder();
+ for (TestEnumCase testEnumCase : enums) {
+ enumBuilder.append(testEnumCase.name());
+ }
+
+ StringBuilder utilBuilder = new StringBuilder();
+ for (String string : values) {
+ utilBuilder.append(string);
+ }
+ assertEquals(enumBuilder.toString(), utilBuilder.toString());
+ }
+
+ /**
+ * Test {@link StringUtil#removeStart(String, String)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link StringUtil#removeStart(String, String)}
+ */
+ @Test
+ public void
+ test_removeStart()
+ throws Exception
+ {
+ String str = "abcdefg";
+ String remove1 = "a";
+ String remove2 = "abc";
+ String remove3 = "def";
+
+ // null test
+ assertEquals( str, StringUtil.removeStart( str, null ) );
+ assertEquals( null, StringUtil.removeStart( null, remove1 ) );
+ assertEquals( null, StringUtil.removeStart( null, null ) );
+
+ // start with
+ assertEquals( "bcdefg", StringUtil.removeStart(str, remove1 ) );
+ assertEquals( "defg", StringUtil.removeStart(str, remove2 ) );
+
+ // not start with
+ assertEquals( str, StringUtil.removeStart(str, remove3 ) );
+ }
+
+ public enum TestEnumCase {
+ ABC("ABC"),
+ DEF("DEF"),
+ GHI("GHI"),
+ JKL("JKL");
+ private String value;
+ TestEnumCase(String v) {
+ value = v;
+ }
+ public String value() {
+ return value;
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ThreadUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/ThreadUtilTest.java
new file mode 100644
index 000000000..62f89167b
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ThreadUtilTest.java
@@ -0,0 +1,70 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+
+/**
+ * ThreadUtilTest
+ *
+ * Test case for {@link ThreadUtil}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see ThreadUtil
+ */
+public class ThreadUtilTest {
+
+ /**
+ * Test {@link ThreadUtil#trySleep(long)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link ThreadUtil#trySleep(long)}
+ */
+ @Test
+ public void test_trySleep() throws Exception {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { 100, 100 },
+ new Object[] { 0, 0 },
+ new Object[] { -100, 0 }
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final int milliseconds = (Integer) TEST_CASE[0];
+ final int expected = (Integer) TEST_CASE[1];
+
+ long start = System.currentTimeMillis();
+ ThreadUtil.trySleep( milliseconds );
+ long end = System.currentTimeMillis();
+
+ assertTrue( "input :" + milliseconds + ", expected :" + expected, expected <= ( end - start ) );
+ }
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/ValidationUtilTest.java b/org.tizen.common/test/src/org/tizen/common/util/ValidationUtilTest.java
new file mode 100644
index 000000000..4fe6bbc14
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/ValidationUtilTest.java
@@ -0,0 +1,146 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* ChangHyun Lee <changhyun1.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+
+package org.tizen.common.util;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * ValidationUtilTest.
+ *
+ * Test case for {@link ValidationUtil}
+ *
+ * @author Changhyun Lee{@literal <changhyun1.lee@samsung.com>} (S-Core)
+ *
+ * @see ValidationUtil
+ *
+ */
+public class ValidationUtilTest {
+
+ /**
+ * Test {@link ValidationUtil#checkForEmail(String value)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link ValidationUtil#checkForEmail(String value)}
+ */
+ @Test
+ public void test_checkForEmail() throws Exception {
+ final String[] validedEmail = {
+ "changhyun1.lee@samsung.com",
+ "12345@exmaple.com",
+ "abcde@exmaple.com",
+ "!a!b#c%d@example.com",
+ "_abcd@example.com",
+ "niceandsimple@example.com",
+ "simplewithsymbol@example.com",
+ "less.common@example.com",
+ "a.little.more.unusual@dept.example.com"
+ };
+ for (String email : validedEmail) {
+ assertTrue(ValidationUtil.checkForEmail(email));
+ }
+
+ final String[] InvalidedEmail = {
+ "changhyun1.lee@samsung",
+ "changhyun1.leesamsung.com",
+ "changhyun1.lee@samsung.com/",
+ "changhyun1.lee@samsung.com!",
+ "@samsung.com",
+ "12345!exmaple.com",
+ "!a!b#c%d@example.co!m",
+ "_abcd@example_com",
+ "user@[IPv6:2001:db8:1ff::a0b:dbd0]",
+ "\"much.more unusual\"@example.com",
+ "\"very.unusual.@.unusual.com\"@example.com",
+ "\"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual\"@strange.example.com",
+ "0@a",
+ "\"!#$%&'*+-/=?^_`{}|~@example.org",
+ "\"()<>[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~ ? ^_`{}|~.a\"@example.org",
+ "\"\"@example.org",
+ "postbox@com", // top-level domains are invalid hostnames
+ "Abc.example.com", // an @ character must separate the local and domain parts
+ "Abc.@example.com", // character dot(.) is last in local part
+ "Abc..123@example.com", // character dot(.) is double
+ "A@b@c@example.com ", // only one @ is allowed outside quotation marks
+ "a\"b(c)d,e:f;g<h>i[j\\k]l@example.com", // none of the special characters in this local part is allowed outside quotation marks
+ "just\"not\"right@example.com", // quoted strings must be dot separated, or the only element making up the local-part
+ "this is\"not\\allowed@example.com", // spaces, quotes, and backslashes may only exist when within quoted strings and preceded by a slash
+ "this\\ still\"not\\allowed@example.com" // even if escaped (preceded by a backslash), spaces, quotes, and backslashes must still be contained by quotes
+ };
+ for (String email : InvalidedEmail) {
+ assertFalse(ValidationUtil.checkForEmail(email));
+ }
+ }
+
+ /**
+ * Test {@link ValidationUtil#checkForURL(String value)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link ValidationUtil#checkForURL(String value)}
+ */
+ @Test
+ public void test_checkForURL() throws Exception {
+ final String[] validedURL = {"http://tizen.org", "http://www.tizen.org", "http://tizen.org/", "http://tizen.org/id", "http://myapp"};
+ for (String url : validedURL) {
+ assertTrue(ValidationUtil.checkForURL(url));
+ }
+
+ final String[] invalidedURL = {"http:/tizen.org", "tizen.org", "www.tizen.org", "http://tizen.org/!", "http://tizen.org/id^", "http://tizen.org/id*"};
+ for (String url : invalidedURL) {
+ assertFalse(ValidationUtil.checkForURL(url));
+ }
+ }
+
+ /**
+ * Test {@link ValidationUtil#checkForFileExtension(String value, String[] extensions)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link ValidationUtil#checkForFileExtension(String value, String[] extensions)}
+ */
+ @Test
+ public void test_checkForFileExtension() throws Exception {
+ final String[] extensions = {".html", ".js", ".css"};
+ assertTrue(ValidationUtil.checkForFileExtension("file.html", extensions));
+ assertTrue(ValidationUtil.checkForFileExtension("123.html", extensions));
+ assertTrue(ValidationUtil.checkForFileExtension("file.js", extensions));
+ assertTrue(ValidationUtil.checkForFileExtension("123.js", extensions));
+ assertTrue(ValidationUtil.checkForFileExtension("file.css", extensions));
+ assertTrue(ValidationUtil.checkForFileExtension("123.css", extensions));
+
+ assertFalse(ValidationUtil.checkForFileExtension("file.html1", extensions));
+ assertFalse(ValidationUtil.checkForFileExtension("123.html!", extensions));
+ assertFalse(ValidationUtil.checkForFileExtension("file.jshtml", extensions));
+ assertFalse(ValidationUtil.checkForFileExtension("123.js2", extensions));
+ assertFalse(ValidationUtil.checkForFileExtension("file.aaacss", extensions));
+ assertFalse(ValidationUtil.checkForFileExtension("123.111css", extensions));
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/io/BufferPoolTest.java b/org.tizen.common/test/src/org/tizen/common/util/io/BufferPoolTest.java
new file mode 100644
index 000000000..ea93b06f7
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/io/BufferPoolTest.java
@@ -0,0 +1,90 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.io;
+
+import static org.junit.Assert.assertEquals;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import org.junit.Test;
+
+
+/**
+ * BufferPoolTest
+ *
+ * Test case for {@link BufferPool}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see BufferPool
+ */
+public class
+BufferPoolTest
+{
+ /**
+ * Test {@link BufferPool#setSizeOfFragment(int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link BufferPool#setSizeOfFragment(int)}
+ */
+ @Test
+ public
+ void
+ test_setSizeOfFragment()
+ throws Exception
+ {
+ final ArrayList<ByteBuffer> tempPool = new ArrayList<ByteBuffer>();
+
+ final BufferPool pool = new BufferPool();
+
+ pool.setSizeOfFragment( 10 );
+ pool.setNumberOfFragments( 10 );
+
+ try {
+ for ( int i = 0 ; i < 9 ; ++i )
+ {
+ tempPool.add( pool.borrow() );
+ }
+ pool.setSizeOfFragment( 20 );
+ ByteBuffer buffer = pool.borrow();
+ assertEquals( 10, buffer.limit() );
+ tempPool.add( buffer );
+ }
+ finally
+ {
+ for ( ByteBuffer buffer : tempPool )
+ {
+ pool.release( buffer );
+ }
+
+ tryClose( pool );
+
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/io/BufferTest.java b/org.tizen.common/test/src/org/tizen/common/util/io/BufferTest.java
new file mode 100644
index 000000000..c5c2c31b8
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/io/BufferTest.java
@@ -0,0 +1,274 @@
+/*
+ * Common
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * BonYong Lee <bonyong.lee@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+package org.tizen.common.util.io;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * BufferTest
+ *
+ * Test case for {@link Buffer}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Buffer
+ */
+public class BufferTest
+{
+
+ /**
+ * {@link BufferPool} to use
+ */
+ protected BufferPool bufferPool;
+
+ /**
+ * Set up test unit
+ *
+ * @throws Exception If test unit can't be set up
+ */
+ @Before
+ public
+ void
+ setUp()
+ throws Exception
+ {
+ bufferPool = new BufferPool();
+
+ bufferPool.setSizeOfFragment( 10 );
+ }
+
+ /**
+ * Tear down test unit
+ *
+ * @throws Exception If test unit can't be tear down
+ */
+ @After
+ public
+ void
+ tearDown()
+ throws Exception
+ {
+ bufferPool.close();
+ }
+
+ /**
+ * Test {@link Buffer#readInt()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Buffer#readInt()}
+ */
+ @Test
+ public
+ void
+ test_readInt()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { 135, new byte[] { 0, 0, 0, -121 } }
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final int expected = (Integer) TEST_CASE[0];
+ final byte[] input = (byte[]) TEST_CASE[1];
+ final Buffer buffer = new Buffer( bufferPool );
+ try
+ {
+ for ( int i = 0, n = input.length ; i < n ; ++i )
+ {
+ buffer.write( input[i] );
+ }
+
+ assertEquals( expected, buffer.readInt() );
+ }
+ finally
+ {
+ tryClose( buffer );
+ }
+ }
+ }
+
+
+ /**
+ * Test {@link Buffer#writeInt(int)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Buffer#writeInt(int)}
+ */
+ @Test
+ public
+ void
+ test_writeInt()
+ throws Exception
+ {
+ final Object[][] TEST_CASES = new Object[][] {
+ new Object[] { 135, new int[] { 0, 0, 0, 135 } }
+ };
+
+ for ( final Object[] TEST_CASE : TEST_CASES )
+ {
+ final int input = (Integer) TEST_CASE[0];
+ final int[] expected = (int[]) TEST_CASE[1];
+
+ final Buffer buffer = new Buffer( bufferPool );
+ try
+ {
+ buffer.writeInt( input );
+ for ( int i = 0, n = expected.length ; i < n ; ++i )
+ {
+ assertEquals( expected[i], buffer.read() );
+ }
+ }
+ finally
+ {
+ tryClose( buffer );
+ }
+ }
+ }
+
+ /**
+ * Test {@link Buffer#getBufferSize()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Buffer#getBufferSize()}
+ */
+ @Test
+ public
+ void
+ test_getBufferSize()
+ throws Exception
+ {
+ final Buffer buffer = new Buffer( bufferPool );
+ try
+ {
+ final BufferOutputStream bufferOut = new BufferOutputStream( buffer );
+ bufferOut.write( "12345678901234567890123456789012345678901234567890".getBytes() );
+
+ assertEquals( 5, buffer.getBufferSize() );
+
+ buffer.read();
+
+ assertEquals( 5, buffer.getBufferSize() );
+
+ }
+ finally
+ {
+ tryClose( buffer );
+ }
+
+ }
+
+ /**
+ * Test {@link Buffer#reset()}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Buffer#reset()}
+ */
+ @Test
+ public
+ void
+ test_reset()
+ throws Exception
+ {
+ final byte[] TEST = "12345678901234567890123456789012345678901234567890".getBytes();
+ final Buffer buffer = new Buffer( bufferPool );
+
+ try
+ {
+ final BufferOutputStream bufferOut = new BufferOutputStream( buffer );
+ bufferOut.write( TEST );
+
+ final BufferInputStream bufferIn = new BufferInputStream( buffer );
+ final byte[] result = new byte[TEST.length];
+
+ assertEquals( TEST.length, bufferIn.read( result ) );
+ assertArrayEquals( TEST, result );
+
+ buffer.reset();
+
+ assertEquals( TEST.length, bufferIn.read( result ) );
+ assertArrayEquals( TEST, result );
+ }
+ finally
+ {
+ tryClose( buffer );
+ }
+
+ }
+
+ /**
+ * Test {@link Buffer#concatenate(Buffer...)}
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Buffer#concatenate(Buffer...)}
+ */
+ @Test
+ public
+ void
+ test_concatenate()
+ throws Exception
+ {
+ final Buffer buffer1 = new Buffer( bufferPool );
+ final Buffer buffer2 = new Buffer( bufferPool );
+
+ final byte[] EXPECTED = "123456789012123456789012".getBytes();
+ final byte[] TEST = "123456789012".getBytes();
+
+ try
+ {
+ final BufferOutputStream bufferOut1 = new BufferOutputStream( buffer1 );
+ bufferOut1.write( TEST );
+
+ final BufferOutputStream bufferOut2 = new BufferOutputStream( buffer1 );
+ bufferOut2.write( TEST );
+
+ Buffer ret = Buffer.concatenate( buffer1, buffer2 );
+ BufferInputStream bufferIn = new BufferInputStream( ret );
+
+ final byte[] result = new byte[2 * TEST.length];
+
+ assertEquals( result.length, ret.size() );
+ assertEquals( result.length, bufferIn.read( result ) );
+ assertArrayEquals( EXPECTED, result );
+
+ }
+ finally
+ {
+ tryClose( buffer1 );
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/test b/org.tizen.common/test/src/org/tizen/common/util/test
new file mode 100644
index 000000000..9daeafb98
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/test
@@ -0,0 +1 @@
+test
diff --git a/org.tizen.common/test/src/org/tizen/common/util/url/classpath/ConnectionTest.java b/org.tizen.common/test/src/org/tizen/common/util/url/classpath/ConnectionTest.java
new file mode 100644
index 000000000..38e27011f
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/url/classpath/ConnectionTest.java
@@ -0,0 +1,92 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.classpath;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.junit.Test;
+
+/**
+ * ConnectionTest
+ *
+ * Test case for {@link Connection}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Connection
+ */
+public class ConnectionTest
+{
+ /**
+ * Test {@link Connection#getClassLoaders()
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Connection#getClassLoaders()
+ */
+ @Test
+ public
+ void
+ test_getClassLoaders()
+ throws Exception
+ {
+ final Object[] classLoaders = Connection.getClassLoaders().toArray();
+ assertEquals( 1, classLoaders.length );
+
+ URLClassLoader classLoader = new URLClassLoader( new URL[] {} );
+ Thread.currentThread().setContextClassLoader( classLoader );
+
+ final Object[] classLoaders2 = Connection.getClassLoaders().toArray();
+ assertEquals( classLoader, classLoaders2[0] );
+ assertEquals( ClassLoader.getSystemClassLoader(), classLoaders2[1] );
+ }
+
+ /**
+ * Test {@link Connection#getInputStream()
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see Connection#getInputStream()
+ */
+ @Test
+ public void test_getInputStream() throws Exception
+ {
+ final Connection con = new Connection( new URL( "file:///virtualrul" ), null );
+ try
+ {
+ con.getInputStream();
+ fail( "Connection must throw IOException" );
+ }
+ catch ( final IOException e )
+ {
+ }
+ }
+
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/url/classpath/HandlerTest.java b/org.tizen.common/test/src/org/tizen/common/util/url/classpath/HandlerTest.java
new file mode 100644
index 000000000..ba24cb3dc
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/url/classpath/HandlerTest.java
@@ -0,0 +1,126 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.classpath;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.tizen.common.util.IOUtil.getBytes;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+/**
+ * HandlerTest
+ *
+ * Test case for {@link Handler}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Handler
+ */
+public class
+HandlerTest
+{
+ protected String oldConfig;
+
+ /**
+ * install url handler for classpath
+ */
+ @Before
+ public void setUp()
+ {
+ oldConfig = System.getProperty( "java.protocol.handler.pkgs" );
+ System.setProperty( "java.protocol.handler.pkgs", "org.tizen.common.util.url" );
+ }
+
+ /**
+ * uninstall url handler for classpath
+ */
+ @After
+ public void tearDown()
+ {
+ if ( null == oldConfig )
+ {
+ return ;
+ }
+ System.setProperty( "java.protocol.handler.pkgs", oldConfig );
+ }
+
+ /**
+ * Test {@link Handler#openConnection(URL)
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Handler#openConnection(URL)
+ */
+ @Test
+ public void test_openConnection() throws Exception
+ {
+
+ final Handler handler = new Handler();
+ final URL url = new URL( "classpath:///" + getClass().getName().replace( '.', '/' ) + ".class" );
+
+ final URLConnection connection = handler.openConnection( url );
+
+ connection.connect();
+ InputStream in = connection.getInputStream();
+ try
+ {
+ assertTrue( 0 < in.read() );
+ }
+ finally
+ {
+ tryClose( in );
+ }
+
+
+ }
+
+ /**
+ * Test {@link Handler#pickupCaller()
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Handler#pickupCaller()
+ */
+ @Test
+ public void test_pickupCaller() throws Exception {
+ final Handler handler = new Handler();
+ assertNull( handler.pickupCaller() );
+
+ final URL u = new URL( "classpath:///a.txt" );
+ final InputStream in = u.openStream();
+ assertArrayEquals( "Hello, World".getBytes(), getBytes( in, true ) );
+
+ }
+}
diff --git a/org.tizen.common/test/src/org/tizen/common/util/url/classpath/a.txt b/org.tizen.common/test/src/org/tizen/common/util/url/classpath/a.txt
new file mode 100644
index 000000000..1856e9be0
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/url/classpath/a.txt
@@ -0,0 +1 @@
+Hello, World \ No newline at end of file
diff --git a/org.tizen.common/test/src/org/tizen/common/util/url/cp/HandlerTest.java b/org.tizen.common/test/src/org/tizen/common/util/url/cp/HandlerTest.java
new file mode 100644
index 000000000..34d0a33f6
--- /dev/null
+++ b/org.tizen.common/test/src/org/tizen/common/util/url/cp/HandlerTest.java
@@ -0,0 +1,115 @@
+/*
+* Common
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+*
+* Contact:
+* BonYong Lee <bonyong.lee@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+* Contributors:
+* - S-Core Co., Ltd
+*
+*/
+package org.tizen.common.util.url.cp;
+
+import static org.junit.Assert.assertTrue;
+import static org.tizen.common.util.IOUtil.tryClose;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+/**
+ * HandlerTest
+ *
+ * Test case for {@link Handler}
+ *
+ * @author BonYong Lee{@literal <bonyong.lee@samsung.com>} (S-Core)
+ *
+ * @see Handler
+ */
+public class
+HandlerTest
+{
+ /**
+ * Property key for URL handler
+ */
+ protected static final String PROP_PKG = "java.protocol.handler.pkgs";
+
+ /**
+ * Old property value for URL handler
+ */
+ protected String oldConfig;
+
+ /**
+ * Set up URL handler before test
+ */
+ @Before
+ public void setUp()
+ {
+ oldConfig = System.getProperty( PROP_PKG );
+ System.setProperty( PROP_PKG, "org.tizen.common.util.url" );
+ }
+
+ /**
+ * Restore URL handler after test
+ */
+ @After
+ public void tearDown()
+ {
+ if ( null == oldConfig )
+ {
+ System.getProperties().remove( PROP_PKG );
+ return ;
+ }
+ System.setProperty( PROP_PKG, oldConfig );
+ }
+
+ /**
+ * Test {@link Handler#openConnection(URL)
+ *
+ * @throws Exception in case of failure in test
+ *
+ * @see {@link Handler#openConnection(URL)
+ */
+ @Test
+ public void test_openConnection() throws Exception
+ {
+
+ final Handler handler = new Handler();
+ final URL url = new URL( "cp:///" + getClass().getName().replace( '.', '/' ) + ".class" );
+
+ final URLConnection connection = handler.openConnection( url );
+
+ connection.connect();
+ InputStream in = connection.getInputStream();
+ try
+ {
+ assertTrue( 0 < in.read() );
+ }
+ finally
+ {
+ tryClose( in );
+ }
+
+
+ }
+
+}