Skip to content

Commit 72ca2cc

Browse files
authored
Merge pull request #3943 from balcirakpeter/bbmriUid
feat(core): added bbmriid persistent modules
2 parents 7d129af + fe87987 commit 72ca2cc

File tree

3 files changed

+179
-0
lines changed

3 files changed

+179
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package cz.metacentrum.perun.core.impl.modules.attributes;
2+
3+
import cz.metacentrum.perun.core.api.Attribute;
4+
import cz.metacentrum.perun.core.api.AttributeDefinition;
5+
import cz.metacentrum.perun.core.api.AttributesManager;
6+
import cz.metacentrum.perun.core.api.User;
7+
import cz.metacentrum.perun.core.impl.PerunSessionImpl;
8+
9+
import java.util.Random;
10+
11+
/**
12+
*
13+
* Class for filling bbmriid shadow value.
14+
* It is only storage! Use module login bbmriid_persistent for access the value.
15+
*
16+
*/
17+
public class urn_perun_user_attribute_def_def_login_namespace_bbmriid_persistent_shadow
18+
extends urn_perun_user_attribute_def_def_login_namespace {
19+
private final static String attrFriendlyName = "login-namespace:bbmriid-persistent-shadow";
20+
private final static int lowestId = 2000;
21+
private final static int randomBound = 10000;
22+
private final static Random random = new Random();
23+
@Override
24+
public Attribute fillAttribute(PerunSessionImpl perunSession, User user, AttributeDefinition attribute) {
25+
26+
Attribute filledAttribute = new Attribute(attribute);
27+
28+
if (attribute.getFriendlyName().equals(attrFriendlyName)) {
29+
String computedValue = Long.toString(System.nanoTime() + random.nextLong(lowestId, randomBound));
30+
filledAttribute.setValue(computedValue);
31+
}
32+
return filledAttribute;
33+
}
34+
35+
@Override
36+
public AttributeDefinition getAttributeDefinition() {
37+
AttributeDefinition attr = new AttributeDefinition();
38+
attr.setNamespace(AttributesManager.NS_USER_ATTR_DEF);
39+
attr.setFriendlyName(attrFriendlyName);
40+
attr.setDisplayName("BBMRI Computed ID");
41+
attr.setType(String.class.getName());
42+
attr.setDescription("BBMRI Computed ID used in proxy and BBMRI services.");
43+
return attr;
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package cz.metacentrum.perun.core.impl.modules.attributes;
2+
3+
import cz.metacentrum.perun.core.api.Attribute;
4+
import cz.metacentrum.perun.core.api.AttributeDefinition;
5+
import cz.metacentrum.perun.core.api.AttributesManager;
6+
import cz.metacentrum.perun.core.api.User;
7+
import cz.metacentrum.perun.core.api.exceptions.AttributeNotExistsException;
8+
import cz.metacentrum.perun.core.api.exceptions.InternalErrorException;
9+
import cz.metacentrum.perun.core.api.exceptions.WrongAttributeAssignmentException;
10+
import cz.metacentrum.perun.core.api.exceptions.WrongAttributeValueException;
11+
import cz.metacentrum.perun.core.api.exceptions.WrongReferenceAttributeValueException;
12+
import cz.metacentrum.perun.core.impl.PerunSessionImpl;
13+
import cz.metacentrum.perun.core.implApi.modules.attributes.SkipValueCheckDuringDependencyCheck;
14+
import cz.metacentrum.perun.core.implApi.modules.attributes.UserVirtualAttributesModuleAbstract;
15+
16+
import java.util.Collections;
17+
import java.util.List;
18+
19+
/**
20+
*
21+
* Class for access def:bbmriid-persistent-shadow attribute. It generates value if you call it for the first time.
22+
*
23+
*/
24+
@SkipValueCheckDuringDependencyCheck
25+
public class urn_perun_user_attribute_def_virt_login_namespace_bbmriid_persistent extends UserVirtualAttributesModuleAbstract {
26+
27+
public static final String SHADOW = "urn:perun:user:attribute-def:def:login-namespace:bbmriid-persistent-shadow";
28+
29+
@Override
30+
public Attribute getAttributeValue(PerunSessionImpl sess, User user, AttributeDefinition attributeDefinition) {
31+
Attribute bbmriidPersistent = new Attribute(attributeDefinition);
32+
33+
try {
34+
Attribute bbmriidPersistentShadow = sess.getPerunBl().getAttributesManagerBl().getAttribute(sess, user, SHADOW);
35+
36+
if (bbmriidPersistentShadow.getValue() == null) {
37+
38+
bbmriidPersistentShadow = sess.getPerunBl().getAttributesManagerBl().fillAttribute(sess, user, bbmriidPersistentShadow);
39+
40+
if (bbmriidPersistentShadow.getValue() == null) {
41+
throw new InternalErrorException("BBMRI ID couldn't be set automatically");
42+
}
43+
sess.getPerunBl().getAttributesManagerBl().setAttribute(sess, user, bbmriidPersistentShadow);
44+
}
45+
46+
bbmriidPersistent.setValue(bbmriidPersistentShadow.getValue());
47+
return bbmriidPersistent;
48+
49+
} catch (WrongAttributeAssignmentException | WrongAttributeValueException | WrongReferenceAttributeValueException | AttributeNotExistsException e) {
50+
throw new InternalErrorException(e);
51+
}
52+
}
53+
54+
@Override
55+
public List<String> getStrongDependencies() {
56+
return Collections.singletonList(SHADOW);
57+
}
58+
59+
@Override
60+
public AttributeDefinition getAttributeDefinition() {
61+
AttributeDefinition attr = new AttributeDefinition();
62+
attr.setNamespace(AttributesManager.NS_USER_ATTR_VIRT);
63+
attr.setFriendlyName("login-namespace:bbmriid-persistent");
64+
attr.setDisplayName("BBMRI Computed ID");
65+
attr.setType(String.class.getName());
66+
attr.setDescription("BBMRI Computed ID used in proxy and BBMRI services. It is set automatically with first call.");
67+
return attr;
68+
}
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package cz.metacentrum.perun.core.impl.modules.attributes;
2+
3+
import cz.metacentrum.perun.core.api.Attribute;
4+
import cz.metacentrum.perun.core.api.BeansUtils;
5+
import cz.metacentrum.perun.core.api.CoreConfig;
6+
import cz.metacentrum.perun.core.api.User;
7+
import cz.metacentrum.perun.core.impl.PerunSessionImpl;
8+
import org.junit.AfterClass;
9+
import org.junit.Before;
10+
import org.junit.BeforeClass;
11+
import org.junit.Test;
12+
13+
import static java.util.Collections.emptyList;
14+
import static org.junit.Assert.assertNotEquals;
15+
import static org.junit.Assert.assertNotNull;
16+
import static org.mockito.Mockito.mock;
17+
import static org.mockito.Mockito.when;
18+
19+
/**
20+
*
21+
* Testing class for login-namespace elixir persistent shadow attribute
22+
*
23+
*/
24+
public class urn_perun_user_attribute_def_def_login_namespace_bbmriid_persistent_shadowTest {
25+
26+
private static urn_perun_user_attribute_def_def_login_namespace_bbmriid_persistent_shadow classInstance;
27+
private static PerunSessionImpl session;
28+
private static User user;
29+
private static CoreConfig originalCoreConfig;
30+
private static final CoreConfig mockedCoreConfig = mock(CoreConfig.class);
31+
@Before
32+
public void SetUp() {
33+
classInstance = new urn_perun_user_attribute_def_def_login_namespace_bbmriid_persistent_shadow();
34+
session = mock(PerunSessionImpl.class);
35+
user = new User();
36+
user.setId(123456);
37+
}
38+
39+
@BeforeClass
40+
public static void setUpCoreConfig() {
41+
originalCoreConfig = BeansUtils.getCoreConfig();
42+
BeansUtils.setConfig(mockedCoreConfig);
43+
when(mockedCoreConfig.getGeneratedLoginNamespaces())
44+
.thenReturn(emptyList());
45+
}
46+
47+
@AfterClass
48+
public static void resetCoreConfig() {
49+
BeansUtils.setConfig(originalCoreConfig);
50+
}
51+
52+
@Test
53+
public void testFillAttributeValueBbmriIdNamespace() {
54+
System.out.println("testFillAttributeValue()");
55+
56+
Attribute attribute = new Attribute();
57+
attribute.setFriendlyName("login-namespace:bbmriid-persistent-shadow");
58+
59+
Attribute outputOne = classInstance.fillAttribute(session, user, attribute);
60+
Attribute outputTwo = classInstance.fillAttribute(session, user, attribute);
61+
assertNotNull(outputOne.valueAsString());
62+
assertNotNull(outputTwo.valueAsString());
63+
assertNotEquals(outputOne.valueAsString(), outputTwo.valueAsString());
64+
}
65+
}

0 commit comments

Comments
 (0)