From d7f006fbc10deee482a8bc3d4aa08f6974f5cd92 Mon Sep 17 00:00:00 2001 From: "Bonyong.lee" Date: Wed, 10 Jul 2013 15:47:07 +0900 Subject: [Title] Fix arch getting logic [Desc.] Change arch logic. Before: check "arm" string, in other case guess X86 architecture -> After: check "arm" or "86" string, in other case throw exception. [Issue] --- .../src/org/tizen/sdblib/Device.java | 26 +++- .../src/org/tizen/sdblib/DeviceMonitor.java | 3 + .../org/tizen/sdblib/command/MatcherFactory.java | 38 +++++- .../command/matcher/KeywordBasedMatcher.java | 1 + .../tizen/sdblib/command/matcher/MultiMatcher.java | 136 +++++++++++++++++++++ .../tizen/sdblib/receiver/MultiLineReceiver.java | 2 +- .../org/tizen/sdblib/command/MultiMatcherTest.java | 84 +++++++++++++ 7 files changed, 286 insertions(+), 4 deletions(-) create mode 100644 org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/MultiMatcher.java create mode 100644 org.tizen.common.sdblib/test/src/org/tizen/sdblib/command/MultiMatcherTest.java diff --git a/org.tizen.common.sdblib/src/org/tizen/sdblib/Device.java b/org.tizen.common.sdblib/src/org/tizen/sdblib/Device.java index d9a3d2735..92c0ef8c7 100644 --- a/org.tizen.common.sdblib/src/org/tizen/sdblib/Device.java +++ b/org.tizen.common.sdblib/src/org/tizen/sdblib/Device.java @@ -25,6 +25,8 @@ */ package org.tizen.sdblib; +import static org.tizen.sdblib.Arch.ARM; +import static org.tizen.sdblib.Arch.X86; import static org.tizen.sdblib.DeviceConstants.CMD_ARCHITECTURE_INFO; import static org.tizen.sdblib.DeviceConstants.CMD_DEVICE_TYPE; import static org.tizen.sdblib.DeviceConstants.CMD_PKG_TOOL_INSTALL_PATH; @@ -34,11 +36,14 @@ import static org.tizen.sdblib.DeviceConstants.RESULT_USER_TYPE_ROOT; import static org.tizen.sdblib.command.Argument.MaxTimeToRespond; import static org.tizen.sdblib.command.CommandFactory.execute; import static org.tizen.sdblib.command.MatcherFactory.containsIgnoreCase; +import static org.tizen.sdblib.command.MatcherFactory.matchers; import static org.tizen.sdblib.util.Assert.notNull; import static org.tizen.sdblib.util.StringUtil.isEmpty; import java.io.IOException; +import java.nio.channels.AsynchronousCloseException; +import org.tizen.sdblib.command.Matcher; import org.tizen.sdblib.command.MatcherFactory; import org.tizen.sdblib.command.PatternExtractor; import org.tizen.sdblib.daemon.ServerState; @@ -491,12 +496,29 @@ implements IDevice /** * Initialize basic information + * @throws AsynchronousCloseException */ public void - initialize() + initialize() throws AsynchronousCloseException { - arch = execute( CMD_ARCHITECTURE_INFO ).in( this, containsIgnoreCase( Arch.ARM.getArch() ) )?Arch.ARM:Arch.X86; + final Matcher arm = containsIgnoreCase( ARM.getArch() ); + final Matcher x86 = containsIgnoreCase( X86.getArch() ); + Object arch = execute( CMD_ARCHITECTURE_INFO ).in( this, matchers( arm, x86 ) ); + + if ( arm.equals( arch ) ) + { + this.arch = ARM; + } + else if ( arm.equals( arch ) ) + { + this.arch = X86; + } + else + { + throw new AsynchronousCloseException(); + } + bEmulator = execute( CMD_DEVICE_TYPE ).in( this, MatcherFactory.equals( RESULT_DEVICE_TYPE_EMULATOR ) ); } diff --git a/org.tizen.common.sdblib/src/org/tizen/sdblib/DeviceMonitor.java b/org.tizen.common.sdblib/src/org/tizen/sdblib/DeviceMonitor.java index ebbb953e8..dcba7aeaa 100644 --- a/org.tizen.common.sdblib/src/org/tizen/sdblib/DeviceMonitor.java +++ b/org.tizen.common.sdblib/src/org/tizen/sdblib/DeviceMonitor.java @@ -242,12 +242,14 @@ extends AbstractServer /** * Updates the device list with the new items received from the monitoring service. + * @throws AsynchronousCloseException */ protected void updateDevices( final ArrayList newList ) + throws AsynchronousCloseException { // because we are going to call mServer.deviceDisconnected which will acquire this lock // we lock it first, so that the SmartDevelopmentBridge lock is always locked first. @@ -447,6 +449,7 @@ extends AbstractServer } } } catch (AsynchronousCloseException ace) { + Log.e("DeviceMonitor", "sdb closed by the other" ); // this happens because of a call to Quit. We do nothing, and the loop will break. } catch (TimeoutException ioe) { handleExpectioninMonitorLoop(ioe); diff --git a/org.tizen.common.sdblib/src/org/tizen/sdblib/command/MatcherFactory.java b/org.tizen.common.sdblib/src/org/tizen/sdblib/command/MatcherFactory.java index 3d6f5e48b..b75bf9435 100644 --- a/org.tizen.common.sdblib/src/org/tizen/sdblib/command/MatcherFactory.java +++ b/org.tizen.common.sdblib/src/org/tizen/sdblib/command/MatcherFactory.java @@ -25,9 +25,13 @@ */ package org.tizen.sdblib.command; +import java.util.Arrays; +import java.util.Collection; + import org.tizen.sdblib.command.matcher.Contains; import org.tizen.sdblib.command.matcher.Equals; import org.tizen.sdblib.command.matcher.InverseMatcher; +import org.tizen.sdblib.command.matcher.MultiMatcher; /** @@ -131,5 +135,37 @@ MatcherFactory return new InverseMatcher( receiver ); } - + /** + * Return matcher to delegate to multiple matchers + * + * @param matchers matchers to be delegated + * + * @return delegate matcher + * + * @see #matchers(Collection) + */ + public static + Matcher> + matchers( + final Matcher... matchers + ) + { + return matchers( Arrays.asList( matchers ) ); + } + + /** + * Return matcher to delegate to multiple matchers + * + * @param matchers matchers to be delegated + * + * @return delegate matcher + */ + public static + Matcher> + matchers( + final Collection> matchers + ) + { + return new MultiMatcher( matchers ); + } } diff --git a/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/KeywordBasedMatcher.java b/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/KeywordBasedMatcher.java index 7bf78ef04..fc0867596 100644 --- a/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/KeywordBasedMatcher.java +++ b/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/KeywordBasedMatcher.java @@ -85,6 +85,7 @@ implements Matcher */ @Override public void processNewLines(String[] lines) { + for( final String line : lines ) { if ( processNewLine( line ) ) diff --git a/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/MultiMatcher.java b/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/MultiMatcher.java new file mode 100644 index 000000000..72809a9cf --- /dev/null +++ b/org.tizen.common.sdblib/src/org/tizen/sdblib/command/matcher/MultiMatcher.java @@ -0,0 +1,136 @@ +/* + * sdblib + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Kangho Kim + * BonYong Lee + * + * 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.sdblib.command.matcher; + +import java.io.IOException; +import java.util.Collection; + +import org.tizen.sdblib.command.Matcher; +import org.tizen.sdblib.receiver.AbstractShellOutputReceiver; + +/** + * MultiMatcher + * + * Delegate multi-matchers + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +MultiMatcher +extends AbstractShellOutputReceiver +implements Matcher> +{ + /** + * matchers + */ + protected final Collection> matchers; + + /** + * Constructor with matchers + * + * @param matchers + */ + @SuppressWarnings("unchecked") + public + MultiMatcher( + final Collection matchers + ) + { + this.matchers = (Collection>) matchers; + } + + /* (non-Javadoc) + * @see org.tizen.sdblib.command.Matcher#getResult() + */ + @Override + public + Matcher + getResult() + { + + for ( final Matcher matcher : matchers ) + { + final Object obj = matcher.getResult(); + if ( null == obj ) + { + continue; + } + return matcher; + } + return null; + } + + + /* (non-Javadoc) + * @see org.tizen.sdblib.receiver.MultiLineReceiver#append(char) + */ + @Override + public + Appendable + append( + final char c + ) + throws IOException + { + for ( final Matcher matcher : matchers ) + { + matcher.append( c ); + } + + return this; + } + + /* (non-Javadoc) + * @see org.tizen.sdblib.receiver.MultiLineReceiver#flush() + */ + @Override + public + void + flush() + throws IOException + { + for ( final Matcher matcher : matchers ) + { + matcher.flush(); + } + } + + /* (non-Javadoc) + * @see org.tizen.sdblib.receiver.MultiLineReceiver#close() + */ + @Override + public + void + close() + throws IOException + { + for ( final Matcher matcher : matchers ) + { + matcher.close(); + } + } + +} diff --git a/org.tizen.common.sdblib/src/org/tizen/sdblib/receiver/MultiLineReceiver.java b/org.tizen.common.sdblib/src/org/tizen/sdblib/receiver/MultiLineReceiver.java index 04198f6e7..2c101f514 100644 --- a/org.tizen.common.sdblib/src/org/tizen/sdblib/receiver/MultiLineReceiver.java +++ b/org.tizen.common.sdblib/src/org/tizen/sdblib/receiver/MultiLineReceiver.java @@ -191,7 +191,7 @@ implements IShellOutputReceiver * * @see com.samsung.sdblib.sdb.IShellOutputReceiver#flush() */ - public final void flush() + public void flush() throws IOException { if ( 0 < lines.size() ) { diff --git a/org.tizen.common.sdblib/test/src/org/tizen/sdblib/command/MultiMatcherTest.java b/org.tizen.common.sdblib/test/src/org/tizen/sdblib/command/MultiMatcherTest.java new file mode 100644 index 000000000..49b6dd422 --- /dev/null +++ b/org.tizen.common.sdblib/test/src/org/tizen/sdblib/command/MultiMatcherTest.java @@ -0,0 +1,84 @@ +/* + * sdblib + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Kangho Kim + * BonYong Lee + * + * 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.sdblib.command; + +import static java.util.Arrays.asList; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.tizen.sdblib.command.MatcherFactory.containsIgnoreCase; + +import org.junit.Test; +import org.tizen.sdblib.command.matcher.MultiMatcher; + +/** + * MultiMatcherTest + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +MultiMatcherTest +{ + + /** + * @throws Exception + */ + @SuppressWarnings("unchecked") + @Test + public + void + test_getResult() + throws Exception + { + { + final Matcher arm = containsIgnoreCase( "arm" ); + final Matcher x86 = containsIgnoreCase( "86" ); + MultiMatcher target = new MultiMatcher( asList( arm, x86 ) ); + target.append( "arml7l" ); + target.close(); + assertTrue( arm.getResult() ); + assertFalse( x86.getResult() ); + } + + { + final Matcher arm = containsIgnoreCase( "arm" ); + final Matcher x86 = containsIgnoreCase( "86" ); + MultiMatcher target = new MultiMatcher( asList( arm, x86 ) ); + target.append( "x86" ); + target.close(); + assertFalse( arm.getResult() ); + assertTrue( x86.getResult() ); + } + { + final Matcher arm = containsIgnoreCase( "arm" ); + final Matcher x86 = containsIgnoreCase( "86" ); + final MultiMatcher target = new MultiMatcher( asList( arm, x86 ) ); + target.close(); + assertFalse( arm.getResult() ); + assertFalse( x86.getResult() ); + } + } + +} -- cgit v1.2.3