Cyberduck Mountain Duck CLI

Changeset 41280


Ignore:
Timestamp:
Jun 7, 2017 9:00:18 PM (14 months ago)
Author:
dkocher
Message:

Refactor protocol factory.

Location:
shelves/02.06.2017
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • shelves/02.06.2017/cli/src/main/java/ch/cyberduck/cli/TerminalHelpPrinter.java

    r35652 r41280  
    4949        protocols.append("Supported protocols");
    5050        protocols.append(StringUtils.LF);
    51         for(Protocol p : ProtocolFactory.getEnabledProtocols()) {
     51        for(Protocol p : ProtocolFactory.global.getProtocols()) {
    5252            protocols.append(p.getProvider()).append("\t").append(p.getDescription());
    5353            protocols.append(StringUtils.LF);
  • shelves/02.06.2017/core/src/main/csharp/ch/cyberduck/core/DataProtectorPasswordStore.cs

    r33399 r41280  
    3030        public override string getPassword(Scheme scheme, int port, String hostName, String user)
    3131        {
    32             Host host = new Host(ProtocolFactory.forScheme(scheme.name()), hostName, port);
     32            Host host = new Host(ProtocolFactory.global.forScheme(scheme.name()), hostName, port);
    3333            host.getCredentials().setUsername(user);
    3434            return getPassword(host);
     
    3737        public override string getPassword(String hostName, String user)
    3838        {
    39             Host host = new Host(ProtocolFactory.forScheme(Scheme.ftp.name()), hostName);
     39            Host host = new Host(ProtocolFactory.global.forScheme(Scheme.ftp.name()), hostName);
    4040            host.getCredentials().setUsername(user);
    4141            return getPassword(host);
     
    4444        public override void addPassword(String hostName, String user, String password)
    4545        {
    46             Host host = new Host(ProtocolFactory.forScheme(Scheme.ftp.name()), hostName);
     46            Host host = new Host(ProtocolFactory.global.forScheme(Scheme.ftp.name()), hostName);
    4747            host.getCredentials().setUsername(user);
    4848            PreferencesFactory.get().setProperty(new HostUrlProvider().get(host), DataProtector.Encrypt(password));
     
    5151        public override void addPassword(Scheme scheme, int port, String hostName, String user, String password)
    5252        {
    53             Host host = new Host(ProtocolFactory.forScheme(scheme.name()), hostName, port);
     53            Host host = new Host(ProtocolFactory.global.forScheme(scheme.name()), hostName, port);
    5454            host.getCredentials().setUsername(user);
    5555            PreferencesFactory.get().setProperty(new HostUrlProvider().get(host), DataProtector.Encrypt(password));
  • shelves/02.06.2017/core/src/main/csharp/ch/cyberduck/core/resources/IconCache.cs

    r37103 r41280  
    371371            {
    372372                dict = new Dictionary<string, Bitmap>();
    373                 foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {}))
     373                foreach (Protocol p in ProtocolFactory.global.getProtocols().toArray(new Protocol[] {}))
    374374                {
    375375                    dict[p.disk()] = IconForName(p.disk(), size);
     
    385385            {
    386386                _protocolIcons = new Dictionary<string, Bitmap>();
    387                 foreach (Protocol p in ProtocolFactory.getEnabledProtocols().toArray(new Protocol[] {}))
     387                foreach (Protocol p in ProtocolFactory.global.getProtocols().toArray(new Protocol[] {}))
    388388                {
    389389                    _protocolIcons[p.getProvider()] = IconForName(p.icon(), 16);
  • shelves/02.06.2017/core/src/main/java/ch/cyberduck/core/ProtocolFactory.java

    r41271 r41280  
    2626import org.apache.log4j.Logger;
    2727
    28 import java.util.HashSet;
    2928import java.util.LinkedHashSet;
    3029import java.util.Set;
    3130import java.util.regex.Pattern;
     31import java.util.stream.Collectors;
    3232
    3333public final class ProtocolFactory {
    3434    private static final Logger log = Logger.getLogger(ProtocolFactory.class);
    3535
    36     /**
    37      * Ordered list of supported protocols.
    38      */
    39     private static final Set<Protocol> registered
    40             = new LinkedHashSet<Protocol>();
     36    public static final ProtocolFactory global = new ProtocolFactory();
    4137
    42     public static final ProtocolFactory global = new ProtocolFactory(registered);
     38    private final Set<Protocol> registered;
    4339
    44     private final Set<Protocol> protocols;
    45 
    46     public ProtocolFactory(final Set<Protocol> protocols) {
    47         this.protocols = protocols;
     40    public ProtocolFactory() {
     41        this(LocalFactory.get(PreferencesFactory.get().getProperty("application.profiles.path")));
    4842    }
    4943
    50     public Protocol find(final String identifier) {
    51         return ProtocolFactory.forName(protocols, identifier);
    52     }
    53 
    54     static {
    55         // Order determines list in connection dropdown
    56         final Local bundled = LocalFactory.get(PreferencesFactory.get().getProperty("application.profiles.path"));
     44    public ProtocolFactory(final Local bundled) {
     45        this.registered = new LinkedHashSet<Protocol>();
    5746        if(bundled.exists()) {
    5847            try {
     
    6655                    }
    6756                    // Replace previous possibly disable protocol in Preferences
    68                     register(profile);
     57                    registered.add(profile);
    6958                }
    7059            }
     
    8776                    }
    8877                    // Replace previous possibly disable protocol in Preferences
    89                     register(protocol);
     78                    registered.add(protocol);
    9079                }
    9180            }
     
    9685    }
    9786
    98     public static void register(final Protocol p) {
    99         registered.remove(p);
    100         registered.add(p);
     87    public ProtocolFactory(final Set<Protocol> protocols) {
     88        this.registered = protocols;
     89    }
     90
     91    public void register(final Protocol protocol) {
     92        registered.add(protocol);
     93    }
     94
     95    public Protocol find(final String identifier) {
     96        return this.forName(registered, identifier);
    10197    }
    10298
     
    104100     * @return List of protocols
    105101     */
    106     public static Set<Protocol> getEnabledProtocols() {
    107         final Set<Protocol> enabled = new HashSet<>();
    108         for(Protocol protocol : registered) {
    109             if(protocol.isEnabled()) {
    110                 enabled.add(protocol);
    111             }
    112         }
    113         return enabled;
     102    public Set<Protocol> getProtocols() {
     103        return registered.stream().filter(Protocol::isEnabled).collect(Collectors.toSet());
    114104    }
    115105
     
    118108     * @return Matching protocol or null if no match
    119109     */
    120     public static Protocol forName(final String identifier) {
    121         return ProtocolFactory.forName(ProtocolFactory.getEnabledProtocols(), identifier);
     110    public Protocol forName(final String identifier) {
     111        return this.forName(this.getProtocols(), identifier);
    122112    }
    123113
    124     public static Protocol forName(final Set<Protocol> protocols, final String identifier) {
     114    public Protocol forName(final Set<Protocol> protocols, final String identifier) {
    125115        for(Protocol protocol : protocols) {
    126116            if(protocol.getProvider().equals(identifier)) {
     
    133123            }
    134124        }
    135         for(Protocol protocol : protocols) {
    136             for(String scheme : protocol.getSchemes()) {
    137                 if(scheme.equals(identifier)) {
    138                     return protocol;
    139                 }
    140             }
    141         }
    142         log.warn(String.format("Unknown protocol with identifier %s", identifier));
    143         return null;
     125        return this.forScheme(identifier);
    144126    }
    145127
     
    148130     * @return Standard protocol for this scheme. This is ambigous
    149131     */
    150     public static Protocol forScheme(final Scheme scheme) {
     132    public Protocol forScheme(final Scheme scheme) {
    151133        return forScheme(scheme.name());
    152134    }
    153135
    154     public static Protocol forScheme(final String scheme) {
    155         return ProtocolFactory.forScheme(ProtocolFactory.getEnabledProtocols(), scheme);
     136    public Protocol forType(final Protocol.Type type) {
     137        for(Protocol protocol : this.getProtocols()) {
     138            if(protocol.getType().equals(type)) {
     139                return protocol;
     140            }
     141        }
     142        log.warn(String.format("Unknown type %s", type));
     143        return null;
    156144    }
    157145
    158     public static Protocol forScheme(final Set<Protocol> protocols, final String scheme) {
     146    public Protocol forScheme(final String scheme) {
     147        return this.forScheme(this.getProtocols(), scheme);
     148    }
     149
     150    public Protocol forScheme(final Set<Protocol> protocols, final String scheme) {
    159151        for(Protocol protocol : protocols) {
    160             for(int k = 0; k < protocol.getSchemes().length; k++) {
    161                 if(protocol.getSchemes()[k].equals(scheme)) {
     152            for(String s : protocol.getSchemes()) {
     153                if(s.equals(scheme)) {
    162154                    return protocol;
    163155                }
     
    168160    }
    169161
    170     private static class ProfileFilter implements Filter<Local> {
     162    private static final class ProfileFilter implements Filter<Local> {
    171163        @Override
    172164        public boolean accept(final Local file) {
  • shelves/02.06.2017/core/src/main/java/ch/cyberduck/core/pool/SessionPool.java

    r40738 r41280  
    8484
    8585    final class DisconnectedSessionPool implements SessionPool {
    86         private static final Host DISCONNECTED = new Host(ProtocolFactory.forName(PreferencesFactory.get().getProperty("connection.protocol.default")),
     86        private static final Host DISCONNECTED = new Host(ProtocolFactory.global.forName(PreferencesFactory.get().getProperty("connection.protocol.default")),
    8787                PreferencesFactory.get().getProperty("connection.hostname.default"),
    8888                PreferencesFactory.get().getInteger("connection.port.default"));
  • shelves/02.06.2017/core/src/main/java/ch/cyberduck/core/proxy/ProxyHostUrlProvider.java

    r41269 r41280  
    3333        switch(host.getProtocol().getScheme()) {
    3434            case sftp:
    35                 return super.get(new Host(ProtocolFactory.forScheme(Scheme.ftp), host.getHostname(), host.getPort()));
     35                return super.get(new Host(ProtocolFactory.global.forScheme(Scheme.ftp), host.getHostname(), host.getPort()));
    3636        }
    3737        return super.get(host);
  • shelves/02.06.2017/core/src/main/java/ch/cyberduck/core/serializer/HostDictionary.java

    r39857 r41280  
    7777            final Object providerObj = dict.stringForKey("Provider");
    7878            if(providerObj != null) {
    79                 final Protocol provider = ProtocolFactory.forName(providerObj.toString());
     79                final Protocol provider = protocols.forName(providerObj.toString());
    8080                if(null != provider) {
    8181                    bookmark.setProtocol(provider);
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/FolderBookmarkCollectionTest.java

    r35652 r41280  
    33import ch.cyberduck.core.local.LocalTouchFactory;
    44
     5import org.junit.BeforeClass;
    56import org.junit.Test;
    67
     
    1213public class FolderBookmarkCollectionTest {
    1314
     15    @BeforeClass
     16    public static void register() {
     17        ProtocolFactory.global.register(new TestProtocol());
     18    }
     19
    1420    @Test
    1521    public void testLoad() throws Exception {
    16         ProtocolFactory.register(new TestProtocol());
    1722        final Local source = new Local(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
    1823        final String uid = "4d6b034c-8635-4e2f-93b1-7306ba22da22";
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/HistoryCollectionTest.java

    r35652 r41280  
    3434    @Test
    3535    public void testAdd() throws Exception {
    36         ProtocolFactory.register(new TestProtocol());
     36        ProtocolFactory.global.register(new TestProtocol());
    3737        final CountDownLatch lock = new CountDownLatch(1);
    3838        final CountDownLatch loaded = new CountDownLatch(1);
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/TestProtocol.java

    r41266 r41280  
    3030            case sftp:
    3131                return Type.ftp;
    32             case http:
    33             case https:
     32            default:
    3433                return Type.dav;
    3534        }
    36         return super.getType();
    3735    }
    3836
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/TransferCollectionTest.java

    r37044 r41280  
    44import ch.cyberduck.core.transfer.Transfer;
    55
     6import org.junit.BeforeClass;
    67import org.junit.Test;
    78
     
    910
    1011public class TransferCollectionTest {
     12
     13    @BeforeClass
     14    public static void register() {
     15        ProtocolFactory.global.register(new TestProtocol());
     16    }
    1117
    1218    @Test
     
    6874    @Test
    6975    public void testLoadCopyWithDestination() throws Exception {
    70         ProtocolFactory.register(new TestProtocol());
    7176        TransferCollection c = new TransferCollection(new Local("src/test/resources/TransferCollectionCopyFormat.plist")) {
    7277            @Override
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/serializer/HostDictionaryTest.java

    r33399 r41280  
    3838    @BeforeClass
    3939    public static void register() {
    40         ProtocolFactory.register(new TestProtocol());
     40        ProtocolFactory.global.register(new TestProtocol());
    4141    }
    4242
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/serializer/TransferDictionaryTest.java

    r37046 r41280  
    5656    @BeforeClass
    5757    public static void register() {
    58         ProtocolFactory.register(new TestProtocol());
     58        ProtocolFactory.global.register(new TestProtocol());
    5959    }
    6060
  • shelves/02.06.2017/core/src/test/java/ch/cyberduck/core/serializer/impl/dd/HostPlistReaderTest.java

    r41013 r41280  
    2727import ch.cyberduck.core.preferences.PreferencesFactory;
    2828
     29import org.junit.BeforeClass;
    2930import org.junit.Test;
    3031
     
    3233
    3334public class HostPlistReaderTest {
     35
     36    @BeforeClass
     37    public static void register() {
     38        ProtocolFactory.global.register(new TestProtocol());
     39    }
    3440
    3541    @Test(expected = LocalAccessDeniedException.class)
     
    4854    @Test
    4955    public void testRead() throws Exception {
    50         ProtocolFactory.register(new TestProtocol());
    5156        HostPlistReader reader = new HostPlistReader();
    5257        final Host read = reader.read(new Local(
     
    5964    @Test
    6065    public void testReadPrivateKey() throws Exception {
    61         ProtocolFactory.register(new TestProtocol());
    6266        HostPlistReader reader = new HostPlistReader();
    6367        final Host read = reader.read(new Local(
     
    7175    @Test
    7276    public void testReadPrivateKeyBookmark() throws Exception {
    73         ProtocolFactory.register(new TestProtocol());
    7477        HostPlistReader reader = new HostPlistReader();
    7578        final Host read = reader.read(new Local(
Note: See TracChangeset for help on using the changeset viewer.
swiss made software