/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gws.core; import ru.codeinside.gws.api.ClientProtocol; import ru.codeinside.gws.api.CryptoProvider; import ru.codeinside.gws.api.LogService; import ru.codeinside.gws.api.Revision; import ru.codeinside.gws.api.ServerProtocol; import ru.codeinside.gws.api.ServiceDefinition; import ru.codeinside.gws.api.ServiceDefinitionParser; import ru.codeinside.gws.api.XmlNormalizer; import ru.codeinside.gws.api.XmlSignatureInjector; import ru.codeinside.gws.core.cproto.ClientRev111111; import ru.codeinside.gws.core.cproto.ClientRev120315; import ru.codeinside.gws.core.sproto.R111111; import ru.codeinside.gws.core.sproto.R120315; final public class ProtocolFactory implements ru.codeinside.gws.api.ProtocolFactory { private ServiceDefinitionParser definitionParser; private CryptoProvider cryptoProvider; private XmlNormalizer xmlNormalizer; private XmlSignatureInjector xmlSignatureInjector; private LogService logService; public void setDefinitionParser(final ServiceDefinitionParser definitionParser) { if (this.definitionParser != null) { throw new IllegalStateException("Предыдущий разборщик не убран"); } this.definitionParser = definitionParser; } public void removeDefinitionParser(final ServiceDefinitionParser definitionParser) { if (this.definitionParser != definitionParser) { throw new IllegalArgumentException("Предыдущий разборщик отличается"); } this.definitionParser = null; } public void setCryptoProvider(final CryptoProvider cryptoProvider) { if (this.cryptoProvider != null) { throw new IllegalStateException("Предыдущий провайдер не убран"); } this.cryptoProvider = cryptoProvider; } public void removeCryptoProvider(final CryptoProvider cryptoProvider) { if (this.cryptoProvider != cryptoProvider) { throw new IllegalStateException("Предыдущий провайдер отличается"); } this.cryptoProvider = null; } public void setXmlNormalizer(final XmlNormalizer xmlNormalizer) { if (this.xmlNormalizer != null) { throw new IllegalStateException("Предыдущий XmlNormalizer не убран"); } this.xmlNormalizer = xmlNormalizer; } public void removeXmlNormalizer(final XmlNormalizer xmlNormalizer){ if (this.xmlNormalizer != xmlNormalizer) { throw new IllegalStateException("Предыдущий XmlNormalizer отличается"); } this.xmlNormalizer = null; } public void setXmlSignatureInjector(final XmlSignatureInjector xmlSignatureInjector) { if (this.xmlSignatureInjector != null) { throw new IllegalStateException("Предыдущий XmlSignatureInjector не убран"); } this.xmlSignatureInjector = xmlSignatureInjector; } public void removeXmlSignatureInjector(final XmlSignatureInjector xmlSignatureInjector) { if (this.xmlSignatureInjector != xmlSignatureInjector) { throw new IllegalStateException("Предыдущий XmlSignatureInjector отличается"); } this.xmlSignatureInjector = null; } public void addLogService(final LogService log) { if (this.logService != null) { throw new IllegalStateException("Предыдущий logger не убран"); } if (log != null) { logService = log; } } public void removeLogService(final LogService log) { if (logService != log) { throw new IllegalArgumentException("Предыдущий logger отличается"); } logService = null; } @Override public ClientProtocol createClientProtocol(final Revision revision) { if (revision == null || revision == Revision.rev110801) { throw new IllegalArgumentException(); } if (revision == Revision.rev111111) { return new ClientRev111111(definitionParser, cryptoProvider, xmlNormalizer, xmlSignatureInjector); } return new ClientRev120315(definitionParser, cryptoProvider, xmlNormalizer, xmlSignatureInjector); } @Override public ServerProtocol createServerProtocol(final ServiceDefinition wsdl) { if (wsdl.namespaces.contains(Xml.REV120315)) { return new R120315(cryptoProvider, xmlNormalizer, xmlSignatureInjector); } if (wsdl.namespaces.contains(Xml.REV111111)) { return new R111111(cryptoProvider, xmlNormalizer, xmlSignatureInjector); } throw new IllegalArgumentException("Неизвестный тип протокола"); } }