X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=org.argeo.suite.workbench.rap%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fworkbench%2Fcommands%2FImportEntities.java;h=b9906e912aaae9b4e2e5e266e73573b931851a7d;hp=4febb0eccb357a7631ecea6a272671493b4d9c2d;hb=e80a8ae5c0b59bac7e83733458bf18eb097653d8;hpb=4754e4ec30ef5c570f1a45b11c19e5df95ffb0e5 diff --git a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/ImportEntities.java b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/ImportEntities.java index 4febb0e..b9906e9 100644 --- a/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/ImportEntities.java +++ b/org.argeo.suite.workbench.rap/src/org/argeo/suite/workbench/commands/ImportEntities.java @@ -1,7 +1,7 @@ package org.argeo.suite.workbench.commands; -import static org.argeo.connect.util.JxlUtils.getStringValue; import static org.argeo.eclipse.ui.EclipseUiUtils.notEmpty; +import static org.argeo.suite.workbench.commands.JxlUtils.getStringValue; import java.io.File; import java.io.FileInputStream; @@ -9,8 +9,10 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -21,11 +23,14 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.activities.ActivitiesNames; +import org.argeo.connect.ConnectConstants; import org.argeo.connect.ConnectNames; import org.argeo.connect.resources.ResourcesNames; import org.argeo.connect.resources.ResourcesService; import org.argeo.connect.util.ConnectJcrUtils; -import org.argeo.connect.util.JxlUtils; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.jcr.JcrUtils; import org.argeo.people.ContactValueCatalogs; @@ -35,7 +40,7 @@ import org.argeo.people.PeopleService; import org.argeo.people.PeopleTypes; import org.argeo.people.util.PeopleJcrUtils; import org.argeo.people.util.PersonJcrUtils; -import org.argeo.suite.SuiteException; +import org.argeo.suite.workbench.SuiteWorkbenchException; import org.argeo.suite.workbench.AsUiPlugin; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -69,6 +74,7 @@ import jxl.Workbook; /** Open a one page wizard to import an EXCEL 2003 legacy organisation file */ public class ImportEntities extends AbstractHandler implements PeopleNames { + private final static Log log = LogFactory.getLog(ImportEntities.class); public final static String ID = AsUiPlugin.PLUGIN_ID + ".importEntities"; @@ -78,6 +84,7 @@ public class ImportEntities extends AbstractHandler implements PeopleNames { static { Map tmpMap = new HashMap(); tmpMap.put("Organisations", PeopleTypes.PEOPLE_ORG); + tmpMap.put("Persons", PeopleTypes.PEOPLE_PERSON); KNOWN_TEMPLATES = Collections.unmodifiableMap(tmpMap); } @@ -122,18 +129,27 @@ public class ImportEntities extends AbstractHandler implements PeopleNames { userInputPage = new UserInputPage("User input page"); addPage(userInputPage); } catch (Exception e) { - throw new SuiteException("Cannot add page to wizard", e); + throw new SuiteWorkbenchException("Cannot add page to wizard", e); } } /** Performs the real import. */ @Override public boolean performFinish() { - // Session session = null; - // String templateName = - // resourceTypeCombo.getItem(resourceTypeCombo.getSelectionIndex()); - // String type = KNOWN_TEMPLATES.get(templateName); - importDefaultOrgFile(file); + String templateName = resourceTypeCombo.getItem(resourceTypeCombo.getSelectionIndex()); + String type = KNOWN_TEMPLATES.get(templateName); + InputStream in = null; + try { + in = new FileInputStream(file); + if (PeopleTypes.PEOPLE_ORG.equals(type)) + importDefaultOrgFile(in); + else if (PeopleTypes.PEOPLE_PERSON.equals(type)) + importDefaultPersonFile(in); + } catch (IOException e) { + throw new SuiteWorkbenchException("Cannot import mapping file", e); + } finally { + IOUtils.closeQuietly(in); + } return true; } @@ -294,17 +310,270 @@ public class ImportEntities extends AbstractHandler implements PeopleNames { } } - // Legacy Organisations - private Node importDefaultOrgFile(File file) { - InputStream in = null; + private Node importDefaultOrgFile(InputStream in) throws IOException { + // TODO make this configurable + int displayNameIndex = 0; + int legalNameIndex = 1; + int legalFormIndex = 2; + int urlsIndex = 3; + int streetIndex = 4; + int postalCodeIndex = 5; + int lIndex = 6; + int stIndex = 7; + int cIndex = 8; + int mobileIndex = 9; + int telephoneNumberIndex = 10; + int mailIndex = 11; + int contactsIndex = 12; + int descriptionIndex = 13; + int tagsIndex = 14; + + Session session = null; + int i = 0; + try { + Workbook wb = JxlUtils.toWorkbook(in, IMPORT_ENCODING); + session = repository.login(); + String basePath = "/" + peopleService.getBaseRelPath(PeopleTypes.PEOPLE_ORG); + Node targetParent = session.getNode(basePath); + Sheet sheet = wb.getSheet(0); + + Node tmpParent = peopleService.getDraftParent(session); + + int rowNb = sheet.getRows(); + for (i = 1; i < rowNb - 1; i++) { + + Node tmpOrg = createDraftNode(tmpParent, PeopleTypes.PEOPLE_ORG); + + String dName = JxlUtils.getStringValue(sheet, displayNameIndex, i); + if (notEmpty(dName)) + tmpOrg.setProperty(PeopleNames.PEOPLE_DISPLAY_NAME, dName); + String lName = getStringValue(sheet, legalNameIndex, i); + if (notEmpty(lName)) + tmpOrg.setProperty(PeopleNames.PEOPLE_LEGAL_NAME, lName); + String lForm = getStringValue(sheet, legalFormIndex, i); + if (notEmpty(lForm)) + tmpOrg.setProperty(PeopleNames.PEOPLE_LEGAL_FORM, lForm); + String urlStr = getStringValue(sheet, urlsIndex, i); + if (notEmpty(urlStr)) + importUrls(tmpOrg, urlStr); + String mailStr = getStringValue(sheet, mailIndex, i); + if (notEmpty(mailStr)) + importMails(tmpOrg, mailStr); + String streetStr = getStringValue(sheet, streetIndex, i); + String pcStr = getStringValue(sheet, postalCodeIndex, i); + String lStr = getStringValue(sheet, lIndex, i); + String stStr = getStringValue(sheet, stIndex, i); + String cStr = getStringValue(sheet, cIndex, i); + if (notEmpty(streetStr) || notEmpty(pcStr) || notEmpty(lStr) || notEmpty(stStr) || notEmpty(cStr)) + PeopleJcrUtils.createAddress(resourcesService, peopleService, tmpOrg, streetStr, null, pcStr, lStr, + stStr, cStr, true, ContactValueCatalogs.CONTACT_CAT_MAIN, null); + String mobileStr = getStringValue(sheet, mobileIndex, i); + if (notEmpty(mobileStr)) + PeopleJcrUtils.createPhone(resourcesService, peopleService, tmpOrg, mobileStr, true, null, null); + String phoneStr = getStringValue(sheet, telephoneNumberIndex, i); + if (notEmpty(phoneStr)) + PeopleJcrUtils.createPhone(resourcesService, peopleService, tmpOrg, phoneStr, true, + ContactValueCatalogs.CONTACT_CAT_DIRECT, null); + String descStr = getStringValue(sheet, descriptionIndex, i); + if (notEmpty(descStr)) + tmpOrg.setProperty(Property.JCR_DESCRIPTION, descStr); + String tagsStr = getStringValue(sheet, tagsIndex, i); + if (notEmpty(tagsStr)) + tmpOrg.setProperty(ResourcesNames.CONNECT_TAGS, ConnectJcrUtils.parseAndClean(tagsStr, ",", true)); + + Node newOrgNode = peopleService.publishEntity(targetParent, PeopleTypes.PEOPLE_ORG, tmpOrg); + // Save the newly created entity without creating a base version + newOrgNode = peopleService.saveEntity(newOrgNode, false); + + String contactsStr = getStringValue(sheet, contactsIndex, i); + if (notEmpty(contactsStr)) + importOrgEmployees(tmpParent, targetParent, newOrgNode, contactsStr); + } + + // Refresh tags and mailing list + Node tagParent = resourcesService.getTagLikeResourceParent(session, ConnectConstants.RESOURCE_TAG); + resourcesService.refreshKnownTags(tagParent); + + // Create Mailing lists + Node mlParent = resourcesService.getTagLikeResourceParent(session, PeopleTypes.PEOPLE_MAILING_LIST); + resourcesService.refreshKnownTags(mlParent); + + } catch (PeopleException | RepositoryException e) { + throw new SuiteWorkbenchException("Cannot import mapping file, error at line: " + (i + 1), e); + } finally { + JcrUtils.logoutQuietly(session); + } + + return null; + } + + private Map initialiseHeaders(Sheet sheet, List validHeaders) { + Map headers = new HashMap<>(); + int length = sheet.getColumns(); + for (int i = 0; i < length; i++) { + String value = JxlUtils.getStringValue(sheet, i, 0); + if (validHeaders.contains(value)) + headers.put(value, i); + else + log.warn(value + " (column [" + i + "]) is not a valid header"); + } + return headers; + } + + private Node importDefaultPersonFile(InputStream in) throws IOException { + // Local shortcut + String JCR_DESC = ConnectJcrUtils.getLocalJcrItemName(Property.JCR_DESCRIPTION); + + // Map headers = new HashMap<>(); + // headers.put(PeopleNames.PEOPLE_FIRST_NAME, 0); + // headers.put(PEOPLE_LAST_NAME, 1); + // headers.put(PEOPLE_SALUTATION, 2); + // headers.put(PEOPLE_HONORIFIC_TITLE, 3); + // headers.put(PEOPLE_NICKNAME, 4); + // headers.put(PEOPLE_NAME_SUFFIX, 5); + // headers.put(PEOPLE_MAIDEN_NAME, 6); + // headers.put(PEOPLE_PMOBILE, 7); + // headers.put(PEOPLE_PTELEPHONE_NUMBER, 8); + // headers.put(PEOPLE_SPOKEN_LANGUAGES, 9); + // headers.put(ResourcesNames.CONNECT_TAGS, 10); + // headers.put(PEOPLE_MAILING_LISTS, 11); + // headers.put(PEOPLE_BIRTH_DATE, 12); + // headers.put(PEOPLE_PMAIL, 13); + // headers.put("people:emailAddressOther", 14); + // headers.put("people:org", 15); + // headers.put(PEOPLE_ROLE, 16); + // headers.put(PEOPLE_DEPARTMENT, 17); + // headers.put("people:facebook", 18); + // headers.put(JCR_DESC, 19); + // headers.put(ActivitiesNames.ACTIVITIES_FROM_IP, 20); + + List validHeaders = Arrays.asList(PeopleNames.PEOPLE_FIRST_NAME, PEOPLE_LAST_NAME, PEOPLE_SALUTATION, + PEOPLE_HONORIFIC_TITLE, PEOPLE_NICKNAME, PEOPLE_NAME_SUFFIX, PEOPLE_MAIDEN_NAME, PEOPLE_PMOBILE, + PEOPLE_PTELEPHONE_NUMBER, PEOPLE_SPOKEN_LANGUAGES, ResourcesNames.CONNECT_TAGS, PEOPLE_MAILING_LISTS, + PEOPLE_BIRTH_DATE, PEOPLE_PMAIL, "people:emailAddressOther", "people:org", PEOPLE_ROLE, + PEOPLE_DEPARTMENT, "people:facebook", JCR_DESC, ActivitiesNames.ACTIVITIES_FROM_IP, PEOPLE_STREET, + PEOPLE_ZIP_CODE, PEOPLE_CITY, PEOPLE_STATE, PEOPLE_COUNTRY); + + String[] basicInfo = { PEOPLE_FIRST_NAME, PEOPLE_LAST_NAME, PEOPLE_SALUTATION, PEOPLE_HONORIFIC_TITLE, + PEOPLE_NICKNAME, PEOPLE_NAME_SUFFIX, PEOPLE_MAIDEN_NAME, PEOPLE_BIRTH_DATE, JCR_DESC }; + + Map primaryContacts = new HashMap<>(); + primaryContacts.put(PEOPLE_PMOBILE, PeopleTypes.PEOPLE_MOBILE); + primaryContacts.put(PEOPLE_PTELEPHONE_NUMBER, PeopleTypes.PEOPLE_TELEPHONE_NUMBER); + primaryContacts.put(PEOPLE_PURL, PeopleTypes.PEOPLE_URL); + primaryContacts.put(PEOPLE_PMAIL, PeopleTypes.PEOPLE_MAIL); + + String[] multiProps = { PEOPLE_SPOKEN_LANGUAGES, ResourcesNames.CONNECT_TAGS, PEOPLE_MAILING_LISTS, }; + + Session session = null; + int i = 0; try { - in = new FileInputStream(file); - return importDefaultOrgFile(in); - } catch (IOException e) { - throw new SuiteException("Cannot import mapping file", e); + Workbook wb = JxlUtils.toWorkbook(in, IMPORT_ENCODING); + session = repository.login(); + String basePath = "/" + peopleService.getBaseRelPath(PeopleTypes.PEOPLE_PERSON); + Node targetParent = session.getNode(basePath); + Sheet sheet = wb.getSheet(0); + + Map headers = initialiseHeaders(sheet, validHeaders); + + Node tmpParent = peopleService.getDraftParent(session); + + int rowNb = sheet.getRows(); + for (i = 1; i < rowNb; i++) { + Node tmpPerson = createDraftNode(tmpParent, PeopleTypes.PEOPLE_PERSON); + + for (String propName : basicInfo) { + if (headers.containsKey(propName)) { + String value = JxlUtils.getStringValue(sheet, headers.get(propName), i); + if (notEmpty(value)) + tmpPerson.setProperty(propName, value); + } + } + + for (String propName : multiProps) { + if (headers.containsKey(propName)) { + String value = JxlUtils.getStringValue(sheet, headers.get(propName), i); + if (notEmpty(value)) + tmpPerson.setProperty(propName, ConnectJcrUtils.parseAndClean(value, ",", true)); + } + } + + for (String propName : primaryContacts.keySet()) { + if (headers.containsKey(propName)) { + String value = JxlUtils.getStringValue(sheet, headers.get(propName), i); + if (notEmpty(value)) { + PeopleJcrUtils.createContact(resourcesService, peopleService, tmpPerson, + primaryContacts.get(propName), value, true, + ContactValueCatalogs.CONTACT_CAT_MAIN, null); + } + } + } + + // Specific values + String propName = "people:emailAddressOther"; + if (headers.containsKey(propName)) { + String value = JxlUtils.getStringValue(sheet, headers.get(propName), i); + if (notEmpty(value)) { + PeopleJcrUtils.createContact(resourcesService, peopleService, tmpPerson, + PeopleTypes.PEOPLE_MAIL, value, false, ContactValueCatalogs.CONTACT_CAT_MAIN, + null); + } + } + + propName = "people:facebook"; + if (headers.containsKey(propName)) { + String value = JxlUtils.getStringValue(sheet, headers.get(propName), i); + if (notEmpty(value)) { + PeopleJcrUtils.createContact(resourcesService, peopleService, tmpPerson, + PeopleTypes.PEOPLE_SOCIAL_MEDIA, value, false, + ContactValueCatalogs.CONTACT_CAT_FACEBOOK, null); + } + } + + String street = null, zip = null, city = null, state = null, country = null; + if (headers.containsKey(PEOPLE_STREET)) + street = JxlUtils.getStringValue(sheet, headers.get(PEOPLE_STREET), i); + if (headers.containsKey(PEOPLE_ZIP_CODE)) + zip = JxlUtils.getStringValue(sheet, headers.get(PEOPLE_ZIP_CODE), i); + if (headers.containsKey(PEOPLE_CITY)) + city = JxlUtils.getStringValue(sheet, headers.get(PEOPLE_CITY), i); + if (headers.containsKey(PEOPLE_STATE)) + state = JxlUtils.getStringValue(sheet, headers.get(PEOPLE_STATE), i); + if (headers.containsKey(PEOPLE_COUNTRY)) + country = JxlUtils.getStringValue(sheet, headers.get(PEOPLE_COUNTRY), i); + + if (notEmpty(street) || notEmpty(zip) || notEmpty(city) || notEmpty(state) || notEmpty(country)) { + PeopleJcrUtils.createAddress(resourcesService, peopleService, tmpPerson, street, null, zip, city, + state, country, true, ContactValueCatalogs.CONTACT_CAT_MAIN, null); + } + + // TODO Experimental connection activity to store info about the + // IP from where a person has registered himself in the system + // propName = ActivitiesNames.ACTIVITIES_FROM_IP; + + // TODO create a job and possibly the related organisation + + Node newPersonNode = peopleService.publishEntity(targetParent, PeopleTypes.PEOPLE_PERSON, tmpPerson); + // Save the newly created entity without creating a base version + newPersonNode = peopleService.saveEntity(newPersonNode, false); + } + + // Refresh tags and mailing list + Node tagParent = resourcesService.getTagLikeResourceParent(session, ConnectConstants.RESOURCE_TAG); + resourcesService.refreshKnownTags(tagParent); + + // Create Mailing lists + Node mlParent = resourcesService.getTagLikeResourceParent(session, PeopleTypes.PEOPLE_MAILING_LIST); + resourcesService.refreshKnownTags(mlParent); + } catch (PeopleException | RepositoryException e) { + String message = "Cannot import mapping file, error at line: " + (i + 1); + // TODO Check why the error is swallowed. + log.error(message, e); + throw new SuiteWorkbenchException(message, e); } finally { - IOUtils.closeQuietly(in); + JcrUtils.logoutQuietly(session); } + return null; } private Node createDraftNode(Node parent, String mainMixin) throws RepositoryException { @@ -344,7 +613,7 @@ public class ImportEntities extends AbstractHandler implements PeopleNames { tmpPerson.setProperty(PEOPLE_FIRST_NAME, firstName); if (EclipseUiUtils.notEmpty(lastName)) tmpPerson.setProperty(PEOPLE_LAST_NAME, lastName); - Node newPersonNode = peopleService.createEntity(targetParent, PeopleTypes.PEOPLE_PERSON, tmpPerson); + Node newPersonNode = peopleService.publishEntity(targetParent, PeopleTypes.PEOPLE_PERSON, tmpPerson); // if (EclipseUiUtils.notEmpty(position)) PersonJcrUtils.addJob(resourcesService, peopleService, newPersonNode, newOrgNode, position, true); // Save the newly created entity without creating a base version @@ -364,12 +633,11 @@ public class ImportEntities extends AbstractHandler implements PeopleNames { line = line.trim(); if (line.startsWith("https://www.facebook.com")) { - PeopleJcrUtils.createSocialMedia(peopleService, resourcesService, contactable, line, - !hasPrimaryFacebook, null, ContactValueCatalogs.CONTACT_CAT_FACEBOOK, null); + PeopleJcrUtils.createSocialMedia(resourcesService, peopleService, contactable, line, + !hasPrimaryFacebook, ContactValueCatalogs.CONTACT_CAT_FACEBOOK, null); hasPrimaryFacebook = true; } else { - PeopleJcrUtils.createWebsite(peopleService, resourcesService, contactable, line, !hasPrimary, null, - null); + PeopleJcrUtils.createWebsite(resourcesService, peopleService, contactable, line, !hasPrimary, null); hasPrimary = true; } } @@ -382,101 +650,11 @@ public class ImportEntities extends AbstractHandler implements PeopleNames { if (EclipseUiUtils.isEmpty(line)) continue loop; line = line.trim(); - PeopleJcrUtils.createEmail(peopleService, resourcesService, contactable, line, !hasPrimary, null, null, - null); + PeopleJcrUtils.createEmail(resourcesService, peopleService, contactable, line, !hasPrimary, null, null); hasPrimary = true; } } - // TODO make this configurable - int displayNameIndex = 0; - int legalNameIndex = 1; - int legalFormIndex = 2; - int urlsIndex = 3; - int streetIndex = 4; - int postalCodeIndex = 5; - int lIndex = 6; - int stIndex = 7; - int cIndex = 8; - int mobileIndex = 9; - int telephoneNumberIndex = 10; - int mailIndex = 11; - int contactsIndex = 12; - int descriptionIndex = 13; - int tagsIndex = 14; - - private Node importDefaultOrgFile(InputStream in) throws IOException { - Session session = null; - int i = 0; - try { - Workbook wb = JxlUtils.toWorkbook(in, IMPORT_ENCODING); - session = repository.login(); - String basePath = "/" + peopleService.getBaseRelPath(PeopleTypes.PEOPLE_ORG); - Node targetParent = session.getNode(basePath); - Sheet sheet = wb.getSheet(0); - - Node tmpParent = peopleService.getDraftParent(session); - - int rowNb = sheet.getRows(); - for (i = 1; i < rowNb - 1; i++) { - - Node tmpOrg = createDraftNode(tmpParent, PeopleTypes.PEOPLE_ORG); - - String dName = JxlUtils.getStringValue(sheet, displayNameIndex, i); - if (notEmpty(dName)) - tmpOrg.setProperty(PeopleNames.PEOPLE_DISPLAY_NAME, dName); - String lName = getStringValue(sheet, legalNameIndex, i); - if (notEmpty(lName)) - tmpOrg.setProperty(PeopleNames.PEOPLE_LEGAL_NAME, lName); - String lForm = getStringValue(sheet, legalFormIndex, i); - if (notEmpty(lForm)) - tmpOrg.setProperty(PeopleNames.PEOPLE_LEGAL_FORM, lForm); - String urlStr = getStringValue(sheet, urlsIndex, i); - if (notEmpty(urlStr)) - importUrls(tmpOrg, urlStr); - String mailStr = getStringValue(sheet, mailIndex, i); - if (notEmpty(mailStr)) - importMails(tmpOrg, mailStr); - String streetStr = getStringValue(sheet, streetIndex, i); - String pcStr = getStringValue(sheet, postalCodeIndex, i); - String lStr = getStringValue(sheet, lIndex, i); - String stStr = getStringValue(sheet, stIndex, i); - String cStr = getStringValue(sheet, cIndex, i); - if (notEmpty(streetStr) || notEmpty(pcStr) || notEmpty(lStr) || notEmpty(stStr) || notEmpty(cStr)) - PeopleJcrUtils.createAddress(peopleService, resourcesService, tmpOrg, streetStr, null, pcStr, lStr, - stStr, cStr, true, null, ContactValueCatalogs.CONTACT_CAT_MAIN, null); - String mobileStr = getStringValue(sheet, mobileIndex, i); - if (notEmpty(mobileStr)) - PeopleJcrUtils.createPhone(peopleService, resourcesService, tmpOrg, mobileStr, true, null, null, - null); - String phoneStr = getStringValue(sheet, telephoneNumberIndex, i); - if (notEmpty(phoneStr)) - PeopleJcrUtils.createPhone(peopleService, resourcesService, tmpOrg, phoneStr, true, null, - ContactValueCatalogs.CONTACT_CAT_DIRECT, null); - String descStr = getStringValue(sheet, descriptionIndex, i); - if (notEmpty(descStr)) - tmpOrg.setProperty(Property.JCR_DESCRIPTION, descStr); - String tagsStr = getStringValue(sheet, tagsIndex, i); - if (notEmpty(tagsStr)) - tmpOrg.setProperty(ResourcesNames.CONNECT_TAGS, ConnectJcrUtils.parseAndClean(tagsStr, ",", true)); - - Node newOrgNode = peopleService.createEntity(targetParent, PeopleTypes.PEOPLE_ORG, tmpOrg); - // Save the newly created entity without creating a base version - newOrgNode = peopleService.saveEntity(newOrgNode, false); - - String contactsStr = getStringValue(sheet, contactsIndex, i); - if (notEmpty(contactsStr)) - importOrgEmployees(tmpParent, targetParent, newOrgNode, contactsStr); - } - } catch (PeopleException | RepositoryException e) { - throw new SuiteException("Cannot import mapping file, error at line: " + (i + 1), e); - } finally { - JcrUtils.logoutQuietly(session); - } - - return null; - } - /* DEPENDENCY INJECTION */ public void setRepository(Repository repository) { this.repository = repository;