Java tutorial
/************************************************************************* * Copyright 2009-2016 Eucalyptus Systems, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/. * * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need * additional information or have any questions. ************************************************************************/ package com.eucalyptus.network.applicator; import java.util.EnumSet; import java.util.Optional; import com.eucalyptus.cluster.NIProperty; import com.eucalyptus.cluster.NetworkInfo; import com.eucalyptus.network.NetworkMode; import com.eucalyptus.util.TypedKey; import com.google.common.collect.Iterables; /** * An applicator that is active in specific network modes. */ public abstract class ModeSpecificApplicator implements Applicator { private static final TypedKey<NetworkMode> MODE_KEY = TypedKey.create("NetworkMode"); private final EnumSet<NetworkMode> modes; protected ModeSpecificApplicator(final EnumSet<NetworkMode> modes) { this.modes = modes; } @Override public final void apply(final ApplicatorContext context, final ApplicatorChain chain) throws ApplicatorException { NetworkMode mode = context.getAttribute(MODE_KEY); if (mode == null) { mode = extractMode(context.getNetworkInfo()); context.setAttribute(MODE_KEY, mode); } if (modes.contains(mode)) { modeApply(mode, context, chain); } else { chain.applyNext(context); } } protected abstract void modeApply(NetworkMode mode, ApplicatorContext context, ApplicatorChain chain) throws ApplicatorException; private NetworkMode extractMode(final NetworkInfo networkInfo) { final Optional<NIProperty> property = networkInfo.getConfiguration().getProperties().stream() .filter(prop -> "mode".equals(prop.getName())).findFirst(); return NetworkMode.fromString(property.map(prop -> Iterables.get(prop.getValues(), 0)).orElse(null), NetworkMode.EDGE); } }