/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.test.heisenberg.extension; import static org.mule.runtime.api.meta.Category.SELECT; import static org.mule.runtime.api.meta.ExpressionSupport.NOT_SUPPORTED; import static org.mule.runtime.api.meta.ExpressionSupport.REQUIRED; import org.mule.runtime.api.exception.MuleException; import org.mule.runtime.api.lifecycle.InitialisationException; import org.mule.runtime.api.lifecycle.Lifecycle; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.core.api.context.MuleContextAware; import org.mule.runtime.core.api.extension.ExtensionManager; import org.mule.runtime.extension.api.annotation.Alias; import org.mule.runtime.extension.api.annotation.Export; import org.mule.runtime.extension.api.annotation.Expression; import org.mule.runtime.extension.api.annotation.Extensible; import org.mule.runtime.extension.api.annotation.Extension; import org.mule.runtime.extension.api.annotation.ExternalLib; import org.mule.runtime.extension.api.annotation.OnException; import org.mule.runtime.extension.api.annotation.Operations; import org.mule.runtime.extension.api.annotation.Sources; import org.mule.runtime.extension.api.annotation.SubTypeMapping; import org.mule.runtime.extension.api.annotation.connectivity.ConnectionProviders; import org.mule.runtime.extension.api.annotation.error.ErrorTypes; import org.mule.runtime.extension.api.annotation.param.ConfigName; import org.mule.runtime.extension.api.annotation.param.Optional; import org.mule.runtime.extension.api.annotation.param.Parameter; import org.mule.runtime.extension.api.annotation.param.ParameterGroup; import org.mule.runtime.extension.api.annotation.param.display.DisplayName; import org.mule.runtime.extension.api.annotation.param.display.Example; import org.mule.runtime.extension.api.annotation.param.display.Text; import org.mule.test.heisenberg.extension.exception.HeisenbergConnectionExceptionEnricher; import org.mule.test.heisenberg.extension.exception.HeisenbergException; import org.mule.test.heisenberg.extension.model.BarberPreferences; import org.mule.test.heisenberg.extension.model.CarDealer; import org.mule.test.heisenberg.extension.model.CarWash; import org.mule.test.heisenberg.extension.model.HealthStatus; import org.mule.test.heisenberg.extension.model.Investment; import org.mule.test.heisenberg.extension.model.KnockeableDoor; import org.mule.test.heisenberg.extension.model.PersonalInfo; import org.mule.test.heisenberg.extension.model.Ricin; import org.mule.test.heisenberg.extension.model.Weapon; import java.math.BigDecimal; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.inject.Inject; @Extension(name = HeisenbergExtension.HEISENBERG, description = HeisenbergExtension.EXTENSION_DESCRIPTION, category = SELECT, minMuleVersion = "4.1") @Operations({HeisenbergOperations.class, MoneyLaunderingOperation.class}) @Extensible(alias = "heisenberg-empire") @OnException(HeisenbergConnectionExceptionEnricher.class) @ConnectionProviders(HeisenbergConnectionProvider.class) @Sources({HeisenbergSource.class, DEARadioSource.class}) @Export(classes = {HeisenbergExtension.class, HeisenbergException.class}) @SubTypeMapping(baseType = Weapon.class, subTypes = {Ricin.class}) @SubTypeMapping(baseType = Investment.class, subTypes = {CarWash.class, CarDealer.class}) @ExternalLib(name = HeisenbergExtension.HEISENBERG_LIB_NAME, description = HeisenbergExtension.HEISENBERG_LIB_DESCRIPTION, fileName = HeisenbergExtension.HEISENBERG_LIB_FILE_NAME, requiredClassName = HeisenbergExtension.HEISENBERG_LIB_CLASS_NAME) @ErrorTypes(HeisenbergErrors.class) public class HeisenbergExtension implements Lifecycle, MuleContextAware { public static final String HEISENBERG = "Heisenberg"; public static final String HEISENBERG_LIB_NAME = "Heisenberg.so"; public static final String HEISENBERG_LIB_DESCRIPTION = "Native Heisenberg support"; public static final String HEISENBERG_LIB_FILE_NAME = "heisenberg.so"; public static final String HEISENBERG_LIB_CLASS_NAME = "org.heisenberg.HeisenbergJNI"; public static final String AGE = "50"; public static final String EXTENSION_DESCRIPTION = "My Test Extension just to unit test"; public static final String RICIN_GROUP_NAME = "Dangerous-Ricin"; public static final String RICIN_PACKS_SUMMARY = "A set of ricin packs"; public static final String PERSONAL_INFORMATION_GROUP_NAME = "Personal Information"; public static final String INLINE_BARBER_PREFERENCES = "Inline Barber Preferences"; public static final String PARAMETER_OVERRIDED_DISPLAY_NAME = "Parameter Custom Display Name"; public static final String PARAMETER_ORIGINAL_OVERRIDED_DISPLAY_NAME = "weaponValueMap"; public static final String LAB_ADDRESS_EXAMPLE = "308 Negra Arroyo Lane, Albuquerque, New Mexico, 87104"; private int initialise = 0; private int start = 0; private int stop = 0; private int dispose = 0; public static int sourceTimesStarted = 0; private MuleContext muleContext; @Inject private ExtensionManager extensionManager; @ConfigName private String configName; @Parameter @Optional private List<PersonalInfo> familyInformations; @Parameter private List<String> enemies = new LinkedList<>(); @Parameter private List<Long> monthlyIncomes = new LinkedList<>(); @Parameter private boolean cancer; @Parameter @Optional private Map<String, Long> recipe; @Parameter @Optional private Map<String, List<String>> deathsBySeasons; @ParameterGroup(name = RICIN_GROUP_NAME) private RicinGroup ricinGroup; @ParameterGroup(name = PERSONAL_INFORMATION_GROUP_NAME) private PersonalInfo personalInfo = new PersonalInfo(); @Parameter private BigDecimal money; @Parameter @Optional private Weapon weapon = new Ricin(); @Parameter @Optional private List<? extends Weapon> wildCardWeapons; @Parameter @Optional private List<?> wildCards; @Parameter @Optional @DisplayName(PARAMETER_OVERRIDED_DISPLAY_NAME) private Map<String, Weapon> weaponValueMap; /** * Doors I might knock on but still haven't made up mind about */ @Parameter @Optional private Map<String, KnockeableDoor> candidateDoors; @Parameter @Optional(defaultValue = "CANCER") private HealthStatus initialHealth; @Parameter @Alias("finalHealth") private HealthStatus endingHealth; @Parameter @Expression(REQUIRED) @Optional @Example(LAB_ADDRESS_EXAMPLE) private String labAddress; @Parameter @Expression(NOT_SUPPORTED) @Optional @Text private String firstEndevour; @Parameter @Optional private List<HealthStatus> healthProgressions; @ParameterGroup(name = INLINE_BARBER_PREFERENCES, showInDsl = true) private BarberPreferences barberPreferences; @Override public void initialise() throws InitialisationException { initialise++; } @Override public void start() throws MuleException { start++; } @Override public void stop() throws MuleException { stop++; } @Override public void dispose() { dispose++; } public BarberPreferences getBarberPreferences() { return barberPreferences; } public List<HealthStatus> getHealthProgression() { return healthProgressions; } public Map<String, Weapon> getWeaponValueMap() { return weaponValueMap; } public ExtensionManager getExtensionManager() { return extensionManager; } public List<String> getEnemies() { return enemies; } public void setEnemies(List<String> enemies) { this.enemies = enemies; } public boolean isCancer() { return cancer; } public BigDecimal getMoney() { return money; } public Map<String, Long> getRecipe() { return recipe; } public RicinGroup getRicinGroup() { return ricinGroup; } public Map<String, KnockeableDoor> getCandidateDoors() { return candidateDoors; } public int getInitialise() { return initialise; } public int getStart() { return start; } public int getStop() { return stop; } public int getDispose() { return dispose; } public HealthStatus getInitialHealth() { return initialHealth; } public HealthStatus getEndingHealth() { return endingHealth; } public PersonalInfo getPersonalInfo() { return personalInfo; } void setEndingHealth(HealthStatus endingHealth) { this.endingHealth = endingHealth; } void setMoney(BigDecimal money) { this.money = money; } public String getLabAddress() { return labAddress; } public String getFirstEndevour() { return firstEndevour; } @Override public void setMuleContext(MuleContext context) { muleContext = context; } public MuleContext getMuleContext() { return muleContext; } public Weapon getWeapon() { return weapon; } public List<Long> getMonthlyIncomes() { return monthlyIncomes; } public Map<String, List<String>> getDeathsBySeasons() { return deathsBySeasons; } public String getConfigName() { return configName; } public List<? extends Weapon> getWildCardWeapons() { return wildCardWeapons; } }