public code v1

This commit is contained in:
2026-05-22 11:14:29 +02:00
parent 427197ec5a
commit b8141736eb
28859 changed files with 575079 additions and 0 deletions
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
@@ -0,0 +1 @@
/bin/
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>afryca.consensusmodel.rodriguez2015</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
@@ -0,0 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: afryca.consensusmodel.rodriguez2015;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: %Bundle-Vendor
Automatic-Module-Name: afryca.consensusmodel.rodriguez2015
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: afryca.consensusmodel,
afryca.hlpr
@@ -0,0 +1,11 @@
#Properties file for afryca.consensusmodel.rodriguez2015
Bundle-Vendor = Sinbad2
Bundle-Name = Rodriguez2015
afryca.consensusmodel.rodriguez2015.name = R. Rodríguez et al. (2015)
afryca.consensusmodel.rodriguez2015.information = Paper: R. M. Rodríguez, L. Martínez, A Consensus Model for Group Decision Making with Hesitant Fuzzy Linguistic Information. International Conference on Intelligent Systems and Knowledge Engineering\\n This consensus model for group decision making problems deal with hesitant fuzzy linguistic term sets that have been proposed to deal with hesitancy in linguistic group decision making problems.
afryca.consensusmodel.rodriguez2015.features = Hesitant fuzzy linguistic information\\nHesitant fuzzy linguistic preference relations\\nFeedback mechanism
afryca.consensusmodel.rodriguez2015.observations = \u0020
afryca.consensusmodel.rodriguez2015.h_max.description = Maximum number of discussion rounds allowed
afryca.consensusmodel.rodriguez2015.mu.description = Consensus threshold
afryca.consensusmodel.rodriguez2015.epsilon.description = Acceptability threshold
@@ -0,0 +1,11 @@
#Properties file for afryca.consensusmodel.rodriguez2015
Bundle-Vendor = Sinbad2
Bundle-Name = Rodriguez2015
afryca.consensusmodel.rodriguez2015.name = R. Rodríguez et al. (2015)
afryca.consensusmodel.rodriguez2015.information = Paper: R. M. Rodríguez, L. Martínez, A Consensus Model for Group Decision Making with Hesitant Fuzzy Linguistic Information. International Conference on Intelligent Systems and Knowledge Engineering\\n Este modelo de consenso para problemas de toma de decisión en grupo trata con conjuntos de terminos lingüísticos difusos dudosos que han sido propuestos para modelar la duda en problemas toma de decisión en grupo lingüísticos.
afryca.consensusmodel.rodriguez2015.features = Información lingüística difusa dudosa\\nRelaciones de preferencia lingüísticas difusas dudosas\\nMecanismo de feedback
afryca.consensusmodel.rodriguez2015.observations = \u0020
afryca.consensusmodel.rodriguez2015.h_max.description = Máximo número de rondas de discusión permitidas
afryca.consensusmodel.rodriguez2015.mu.description = Umbral de consenso
afryca.consensusmodel.rodriguez2015.epsilon.description = Umbral de aceptabilidad
@@ -0,0 +1,7 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
OSGI-INF/l10n/bundle.properties,\
OSGI-INF/
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="afryca.consensusmodel">
<ConsensusModel
ConsensusModel="afryca.consensusmodel.rodriguez2015.Rodriguez2015"
Information="%afryca.consensusmodel.rodriguez2015.information"
MainFeatures="%afryca.consensusmodel.rodriguez2015.features"
Multicriteria="false"
Name="%afryca.consensusmodel.rodriguez2015.name"
Observations="%afryca.consensusmodel.rodriguez2015.observations"
Structure="afryca.hlpr"
WithFeedback="true"
id="Rodriguez2015">
<Variable
default_value="0.05"
description="%afryca.consensusmodel.rodriguez2015.epsilon.description"
id="epsilon"
is_array="false"
is_internal="false"
type="Float">
</Variable>
<Variable
default_value="0.85"
description="%afryca.consensusmodel.rodriguez2015.mu.description"
id="mu"
is_array="false"
is_internal="false"
type="Float">
</Variable>
<Variable
default_value="15"
description="%afryca.consensusmodel.rodriguez2015.h_max.description"
id="h_max"
is_array="false"
is_internal="false"
type="Integer">
</Variable>
</ConsensusModel>
</extension>
</plugin>
@@ -0,0 +1,500 @@
package afryca.consensusmodel.rodriguez2015;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import afryca.ase.RunnableScript;
import afryca.cm.CM;
import afryca.consensumodel.addon.E4DIAddon;
import afryca.consensusmodel.ConsensusEngine;
import afryca.consensusmodel.ConsensusModel;
import afryca.consensusmodel.EChangeType;
import afryca.consensusmodel.definition.EResultElements;
import afryca.domain.fuzzyset.FuzzySet;
import afryca.hlpr.HLPR;
import afryca.hlpr.valuation.HesitantLinguisticValuation;
import afryca.structure.Structure;
import afryca.structure.pair.Pair;
public class Rodriguez2015 extends ConsensusModel {
private static final String CONSENSUS_MODEL_NAME = "Rodríguez et al. (2015)"; //$NON-NLS-1$
private static final int CHANGE_DEGREE = 3;
private static final String MU = "mu"; //$NON-NLS-1$
private static final String MAX_ROUNDS = "h_max"; //$NON-NLS-1$
private static final String EPSILON = "epsilon"; //$NON-NLS-1$
private ArrayList<Structure> unifiedPreferences;
private ArrayList<Float[][]> centralPreferences;
private ArrayList<Float[][]> proximityMatrices;
private Map<Pair<Integer, Integer>, Float[][]> similarityMatrices;
private CM cm;
private Float[] consensusAlternatives;
private Float[][] collective;
private int[] advises;
private int numberOfChanges;
private Integer h_max;
private Integer round;
private Integer g;
private Float cr;
private Float mu;
private Float epsilon;
@Override
protected void setModelConfiguration() {}
@Override
protected void obtainConfigurationValues() {
mu = (Float) configuration.getValue(MU);
h_max = (Integer) configuration.getValue(MAX_ROUNDS);
epsilon = (Float) configuration.getValue(EPSILON);
round = 0;
numberOfChanges = 0;
advises = null;
}
@Override
protected void preFirstSaveRoundResults() {
Structure[] auxPreferences = clonePreferencesUnion(preferences, preferences[0].groupPreferences(numberOfExperts, numberOfAlternatives, numberOfCriteria,
Arrays.copyOfRange(preferences, 0, preferences.length - 1)));
computeConsensusDegree();
preSaveRoundResult(1, auxPreferences, obtainVisualizeValues(), cr);
result.put(EResultElements.initial_consensus_degree, cr);
result.put(EResultElements.maxround, h_max);
result.put(EResultElements.consensus_threshold, mu);
result.put(EResultElements.consensus_model, CONSENSUS_MODEL_NAME);
}
private void computeConsensusDegree() {
unifyValuations();
computeCentralPreferences();
computeSimilarityMatrices();
computeConsensusMatrix();
computeConsensusAlternatives();
computeOverallConsensusDegree();
computeCollective();
}
@SuppressWarnings("unchecked")
private void unifyValuations() {
Structure[] auxPreferences = Arrays.copyOfRange(preferences, 0, preferences.length - 1);
unifiedPreferences = (ArrayList<Structure>) ((RunnableScript) E4DIAddon.aseService.createExecutionBuilder()
.setFunction("Unification")
.putVariable("preferences", auxPreferences)
.putVariable("blts", getBLTS(auxPreferences))
.execute())
.getResult();
}
private FuzzySet getBLTS(Structure[] preferences) {
FuzzySet result=(FuzzySet) E4DIAddon.aseService
.createFragmentBuilder()
.putVariable("preferences", preferences) //$NON-NLS-1$
.setCode("unification.getBLTS(preferences)") //$NON-NLS-1$
.setOutputType(FuzzySet.class.getName())
.eval()
.getResult();
g = result.getLabelSet().getCardinality();
return result;
}
private void computeCentralPreferences() {
centralPreferences = new ArrayList<>();
Float numerator = 0f, denominator = 0f;
for(Structure st: unifiedPreferences) {
Float[][] centralPreference = new Float[numberOfAlternatives][numberOfAlternatives];
for(int l = 0; l < numberOfAlternatives; ++l) {
for(int k = 0; k < numberOfAlternatives; ++k) {
if(l != k) {
FuzzySet unifiedValuation = ((FuzzySet) st.getValue(l, k));
numerator = 0f;
for(int j = 0; j < g; ++j) {
numerator += j * unifiedValuation.getValue(j).floatValue();
}
denominator = sumUnifiedValues(unifiedValuation);
centralPreference[l][k] = (denominator == 0) ? 0 : numerator / denominator;
}
}
}
centralPreferences.add(centralPreference);
}
}
private Float sumUnifiedValues(FuzzySet unifiedDomain) {
Float acum = 0f;
for(int j = 0; j < g; ++j) {
acum += unifiedDomain.getValue(j).floatValue();
}
return acum;
}
private void computeSimilarityMatrices() {
similarityMatrices = new LinkedHashMap<>();
for(int i = 0; i < numberOfExperts - 1; ++i) {
Float[][] similarityMatrix = new Float[numberOfAlternatives][numberOfAlternatives];
for(int t = i + 1; t < numberOfExperts; ++t) {
Pair<Integer, Integer> pairExperts = new Pair<Integer, Integer>(i, t);
for(int l = 0; l < numberOfAlternatives; ++l) {
for(int k = 0; k < numberOfAlternatives; ++k) {
if(l != k) {
similarityMatrix[l][k] = computeSimilarity(centralPreferences.get(i)[l][k], centralPreferences.get(t)[l][k]);
}
}
}
similarityMatrices.put(pairExperts, similarityMatrix);
}
}
}
private Float computeSimilarity(Float central1, Float central2) {
return 1f - Math.abs((central1 - central2) / g);
}
private void computeConsensusMatrix() {
List<Float> sim = new LinkedList<Float>();
cm = new CM(numberOfAlternatives);
for(int l = 0; l < numberOfAlternatives; ++l) {
for(int k = 0; k < numberOfAlternatives; ++k) {
if(l != k) {
for(Pair<Integer, Integer> pairExperts: similarityMatrices.keySet()) {
sim.add(similarityMatrices.get(pairExperts)[l][k]);
}
cm.setValue(l, k, aggregateSIMValues(sim));
}
}
}
}
private Float aggregateSIMValues(List<Float> sim) {
Float arithmeticMean = 0f;
for(Float simValue: sim) {
arithmeticMean += simValue;
}
return arithmeticMean / sim.size();
}
private void computeConsensusAlternatives() {
consensusAlternatives = ConsensusEngine.computeAlternativesConsensus(numberOfAlternatives, cm);
}
private void computeOverallConsensusDegree() {
cr = Math.round(ConsensusEngine.consensusBasedOnAlternativesConsensus(numberOfAlternatives, consensusAlternatives) * 100f) / 100f;
}
private void computeCollective() {
preferences[preferences.length - 1] = preferences[0].groupPreferences(numberOfExperts, numberOfAlternatives, numberOfCriteria,
Arrays.copyOfRange(preferences, 0, preferences.length - 1));
}
@Override
protected void preSaveRoundResults() {
preSaveRoundResult(round + 1, preferences, obtainVisualizeValues(), cr);
}
@Override
protected void consensusRound() {
advises = null;
computeConsensusDegree();
if(cr < mu) {
adviceGeneration();
round++;
}
}
private void adviceGeneration() {
computeCollectiveCentralPreference();
computeProximityMatrices();
computeChanges();
}
private void computeCollectiveCentralPreference() {
collective = new Float[numberOfAlternatives][numberOfAlternatives];
for(int l = 0; l < numberOfAlternatives; ++l) {
for(int k = 0; k < numberOfAlternatives; ++k) {
if(l != k) {
collective[l][k] = 0f;
for(int t = 0; t < numberOfExperts; ++t) {
collective[l][k] += centralPreferences.get(t)[l][k];
}
collective[l][k] /= numberOfExperts;
}
}
}
}
private void computeProximityMatrices() {
proximityMatrices = new ArrayList<>();
for(int i = 0; i < numberOfExperts; ++i) {
Float[][] proximityMatrix = new Float[numberOfAlternatives][numberOfAlternatives];
for(int l = 0; l < numberOfAlternatives; ++l) {
for(int k = 0; k < numberOfAlternatives; ++k) {
if(l != k) {
proximityMatrix[l][k] = 1f - Math.abs((centralPreferences.get(i)[l][k] - collective[l][k]) / g);
}
}
}
proximityMatrices.add(proximityMatrix);
}
}
private void computeChanges() {
List<Pair<Integer, Integer>> pairAlternativesToChange = identifyPairAlternativesToChange();
Map<Integer, List<Pair<Integer, Integer>>> expertsToChange = identifyExpertsToChange(pairAlternativesToChange);
EChangeType[][][] changesDirection = computeChangesDirection(expertsToChange);
makeChanges(changesDirection);
computeNumberOfAdvises(changesDirection);
}
private List<Pair<Integer, Integer>> identifyPairAlternativesToChange() {
List<Pair<Integer, Integer>> pairAlternativesToChange = new LinkedList<>();
for(int l = 0; l < numberOfAlternatives; ++l) {
Float consensusAlternative = consensusAlternatives[l];
for(int k = 0; k < numberOfAlternatives; ++k) {
if(k > l) {
Float consensusPairAlternatives = (Float) cm.getValue(l, k);;
if(consensusAlternative < mu && consensusPairAlternatives < mu) {
pairAlternativesToChange.add(new Pair<Integer, Integer>(l, k));
}
}
}
}
return pairAlternativesToChange;
}
private Map<Integer, List<Pair<Integer, Integer>>> identifyExpertsToChange(List<Pair<Integer, Integer>> pairAlternativesToChange) {
Map<Integer, List<Pair<Integer, Integer>>> expertsToChange = new LinkedHashMap<>();
Float[][] averageProximityMatrix = computeAverageProximityMatrix();
for(Pair<Integer, Integer> pairAlternatives: pairAlternativesToChange) {
for(int i = 0; i < numberOfExperts; ++i) {
Float proximityValueForPairAlternatives = proximityMatrices.get(i)[pairAlternatives.getLeft()][pairAlternatives.getRight()];
if(proximityValueForPairAlternatives < averageProximityMatrix[pairAlternatives.getLeft()][pairAlternatives.getRight()]) {
if(expertsToChange.get(i) == null) {
List<Pair<Integer, Integer>> pairAlternativesToChangeByExpert = new LinkedList<>();
pairAlternativesToChangeByExpert.add(pairAlternatives);
expertsToChange.put(i, pairAlternativesToChangeByExpert);
} else {
expertsToChange.get(i).add(pairAlternatives);
}
}
}
}
return expertsToChange;
}
private Float[][] computeAverageProximityMatrix() {
Float[][] averageProximityMatrix = new Float[numberOfAlternatives][numberOfAlternatives];
for(int l = 0; l < numberOfAlternatives; ++l) {
for(int k = 0; k < numberOfAlternatives; ++k) {
if(l != k) {
averageProximityMatrix[l][k] = 0f;
for(int i = 0; i < numberOfExperts; ++i) {
averageProximityMatrix[l][k] += proximityMatrices.get(i)[l][k];
}
averageProximityMatrix[l][k] /= numberOfExperts;
}
}
}
return averageProximityMatrix;
}
private EChangeType[][][] computeChangesDirection(Map<Integer, List<Pair<Integer, Integer>>> expertsToChange) {
EChangeType[][][] result = initializeChanges();
Float difference;
for (Integer i: expertsToChange.keySet()) {
List<Pair<Integer, Integer>> pairAlternativesToChange = expertsToChange.get(i);
for (int l = 0; l < numberOfAlternatives; l++) {
for (int k = 0; k < numberOfAlternatives; k++) {
if(l != k) {
Pair<Integer, Integer> pairAlternatives = new Pair<Integer, Integer>(l, k);
if (pairAlternativesToChange.contains(pairAlternatives)) {
difference = centralPreferences.get(i)[l][k] - collective[l][k];
if (difference < (-epsilon)) {
result[i][l][k] = EChangeType.Increase;
numberOfChanges++;
} else if (difference > epsilon) {
result[i][l][k] = EChangeType.Decrease;
numberOfChanges++;
} else if((-epsilon) <= difference && difference <= epsilon) {
result[i][l][k] = EChangeType.NotChange;
}
}
}
}
}
}
return result;
}
private EChangeType[][][] initializeChanges() {
EChangeType[][][] result = new EChangeType[numberOfExperts][numberOfAlternatives][numberOfAlternatives];
for (int i = 0; i < numberOfExperts; i++) {
for (int l = 0; l < numberOfAlternatives; l++) {
for (int k = 0; k < numberOfAlternatives; k++) {
result[i][l][k] = EChangeType.NotChange;
}
}
}
numberOfChanges = 0;
return result;
}
private void makeChanges(EChangeType[][][] changes) {
HesitantLinguisticValuation value;
EChangeType change;
double[] changesToMake = getNChanges(numberOfChanges);
int currentChange = 0;
for (int i = 0; i < numberOfExperts; i++) {
for (int l = 0; l < numberOfAlternatives; l++) {
for (int k = 0; k < numberOfAlternatives; k++) {
if(l != k) {
change = changes[i][l][k];
if (change != EChangeType.NotChange && changesToMake[currentChange++] != 0f) {
value = (HesitantLinguisticValuation) preferences[i].getValue(l, k);
if (change == EChangeType.Increase) {
value = increaseCase(i, l, k);
} else if (change == EChangeType.Decrease) {
value = decreaseCase(i, l, k);
}
((HLPR) preferences[i]).setValueSymmetrically(l, k, value);
}
}
}
}
}
}
private void computeNumberOfAdvises(EChangeType[][][] changesDirection) {
advises = new int[numberOfExperts];
for (int i = 0; i < numberOfExperts; i++) {
advises[i] = 0;
for (int l = 0; l < numberOfAlternatives; l++) {
for (int k = 0; k < numberOfAlternatives; k++) {
if (changesDirection[i][l][k] != EChangeType.NotChange) {
advises[i] = advises[i] + 1;
}
}
}
}
}
private HesitantLinguisticValuation increaseCase(int i, int l, int k) {
HesitantLinguisticValuation hlv = (HesitantLinguisticValuation) preferences[i].getValue(l, k);
FuzzySet fuzzySet = (FuzzySet) hlv.getDomain();
if(hlv.isPrimary()) {
int posLabel = fuzzySet.getLabelSet().getPos(hlv.getLabel());
if(posLabel <= fuzzySet.getLabelSet().getCardinality() - CHANGE_DEGREE) {
hlv.setLabel(posLabel + CHANGE_DEGREE);
}
} else if(hlv.isUnary()) {
int posTerm = fuzzySet.getLabelSet().getPos(hlv.getTerm());
if(posTerm <= fuzzySet.getLabelSet().getCardinality() - CHANGE_DEGREE) {
hlv.setLabel(posTerm + CHANGE_DEGREE);
}
} else {
int posTerm1 = fuzzySet.getLabelSet().getPos(hlv.getLowerTerm());
int posTerm2 = fuzzySet.getLabelSet().getPos(hlv.getUpperTerm());
if(posTerm1 <= fuzzySet.getLabelSet().getCardinality() - CHANGE_DEGREE) {
if(posTerm1 + CHANGE_DEGREE == posTerm2) {
hlv.setLabel(posTerm2);
} else if(posTerm1 + CHANGE_DEGREE < posTerm2){
hlv.setBinaryRelation(posTerm1 + CHANGE_DEGREE, posTerm2);
}
}
}
return hlv;
}
private HesitantLinguisticValuation decreaseCase(int i, int l, int k) {
HesitantLinguisticValuation hlv = (HesitantLinguisticValuation) preferences[i].getValue(l, k);
FuzzySet fuzzySet = (FuzzySet) hlv.getDomain();
if(hlv.isPrimary()) {
int posLabel = fuzzySet.getLabelSet().getPos(hlv.getLabel());
if(posLabel - CHANGE_DEGREE >= 0) {
hlv.setLabel(posLabel - CHANGE_DEGREE);
}
} else if(hlv.isUnary()) {
int posTerm = fuzzySet.getLabelSet().getPos(hlv.getTerm());
if(posTerm - CHANGE_DEGREE >= 0) {
hlv.setLabel(posTerm - CHANGE_DEGREE);
}
} else {
int posTerm1 = fuzzySet.getLabelSet().getPos(hlv.getLowerTerm());
int posTerm2 = fuzzySet.getLabelSet().getPos(hlv.getUpperTerm());
if(posTerm2 - CHANGE_DEGREE == posTerm1) {
hlv.setLabel(posTerm1);
} else if(posTerm2 - CHANGE_DEGREE > posTerm1) {
hlv.setBinaryRelation(posTerm1, posTerm2 - CHANGE_DEGREE);
}
}
return hlv;
}
@Override
protected void posSaveRoundResults() {
computeConsensusDegree();
posSaveRoundResult(preferences, obtainVisualizeValues(), cr, advises, preferences[preferences.length - 1]);
}
@Override
protected boolean mustBeCarriedOutAnotherRound() {
return (cr < mu) && (round < h_max);
}
@Override
protected Float[][][] obtainVisualizeValues() {
Structure[] auxPreferences = clonePreferencesUnion(preferences, preferences[0].groupPreferences(numberOfExperts, numberOfAlternatives, numberOfCriteria,
Arrays.copyOfRange(preferences, 0, preferences.length - 1)));
Float[][][] preferencesGroupVisualization = new Float[numberOfExperts + 1][numberOfAlternatives][numberOfAlternatives];
for (int i = 0; i < numberOfExperts + 1; i++) {
preferencesGroupVisualization[i] = auxPreferences[i].obtainVisualizeValues();
}
return preferencesGroupVisualization;
}
@Override
protected void saveExecutionResults() {
this.configuration.setValue(PREFERENCES, preferences);
result.put(EResultElements.number_of_rounds_required, round);
result.put(EResultElements.consensus_degree_achieved, cr);
}
}
@@ -0,0 +1,10 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: afryca.consensusmodel.rodriguez2015;singleton:=true
Bundle-Version: 1.0.0.202101221157
Bundle-Vendor: %Bundle-Vendor
Automatic-Module-Name: afryca.consensusmodel.rodriguez2015
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: afryca.consensusmodel,afryca.hlpr
@@ -0,0 +1,4 @@
#Fri Jan 22 13:01:37 CET 2021
artifact.main=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.rodriguez2015\\target\\afryca.consensusmodel.rodriguez2015-1.0.0-SNAPSHOT.jar
artifact.attached.p2artifacts=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.rodriguez2015\\target\\p2artifacts.xml
artifact.attached.p2metadata=C\:\\Users\\\u00C1lvaro\\Workspaces\\afryca_2020\\afryca\\plugins\\afryca.consensusmodel.rodriguez2015\\target\\p2content.xml
@@ -0,0 +1,3 @@
artifactId=afryca.consensusmodel.rodriguez2015
groupId=afryca.group
version=1.0.0-SNAPSHOT
@@ -0,0 +1,13 @@
<?xml version='1.0' encoding='UTF-8'?>
<?artifactRepository version='1.1.0'?>
<artifacts size='1'>
<artifact classifier='osgi.bundle' id='afryca.consensusmodel.rodriguez2015' version='1.0.0.202101221157'>
<properties size='5'>
<property name='artifact.size' value='12341'/>
<property name='download.size' value='12341'/>
<property name='maven-groupId' value='afryca.group'/>
<property name='maven-artifactId' value='afryca.consensusmodel.rodriguez2015'/>
<property name='maven-version' value='1.0.0-SNAPSHOT'/>
</properties>
</artifact>
</artifacts>
@@ -0,0 +1,49 @@
<?xml version='1.0' encoding='UTF-8'?>
<units size='1'>
<unit id='afryca.consensusmodel.rodriguez2015' version='1.0.0.202101221157' generation='2'>
<update id='afryca.consensusmodel.rodriguez2015' range='[0.0.0,1.0.0.202101221157)' severity='0'/>
<properties size='9'>
<property name='es.Bundle-Name' value='Rodriguez2015'/>
<property name='es.Bundle-Vendor' value='Sinbad2'/>
<property name='df_LT.Bundle-Name' value='Rodriguez2015'/>
<property name='df_LT.Bundle-Vendor' value='Sinbad2'/>
<property name='org.eclipse.equinox.p2.name' value='%Bundle-Name'/>
<property name='org.eclipse.equinox.p2.provider' value='%Bundle-Vendor'/>
<property name='maven-groupId' value='afryca.group'/>
<property name='maven-artifactId' value='afryca.consensusmodel.rodriguez2015'/>
<property name='maven-version' value='1.0.0-SNAPSHOT'/>
</properties>
<provides size='6'>
<provided namespace='org.eclipse.equinox.p2.iu' name='afryca.consensusmodel.rodriguez2015' version='1.0.0.202101221157'/>
<provided namespace='osgi.bundle' name='afryca.consensusmodel.rodriguez2015' version='1.0.0.202101221157'/>
<provided namespace='osgi.identity' name='afryca.consensusmodel.rodriguez2015' version='1.0.0.202101221157'>
<properties size='1'>
<property name='type' value='osgi.bundle'/>
</properties>
</provided>
<provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>
<provided namespace='org.eclipse.equinox.p2.localization' name='es' version='1.0.0'/>
<provided namespace='org.eclipse.equinox.p2.localization' name='df_LT' version='1.0.0'/>
</provides>
<requires size='3'>
<required namespace='osgi.bundle' name='afryca.consensusmodel' range='0.0.0'/>
<required namespace='osgi.bundle' name='afryca.hlpr' range='0.0.0'/>
<requiredProperties namespace='osgi.ee' match='(&amp;(osgi.ee=JavaSE)(version=1.8))'>
<description>
afryca.consensusmodel.rodriguez2015
</description>
</requiredProperties>
</requires>
<artifacts size='1'>
<artifact classifier='osgi.bundle' id='afryca.consensusmodel.rodriguez2015' version='1.0.0.202101221157'/>
</artifacts>
<touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>
<touchpointData size='1'>
<instructions size='1'>
<instruction key='manifest'>
Bundle-SymbolicName: afryca.consensusmodel.rodriguez2015;singleton:=true&#xA;Bundle-Version: 1.0.0.202101221157&#xA;
</instruction>
</instructions>
</touchpointData>
</unit>
</units>