/******************************************************************************* * Copyright (c) 2008 Dennis Schenk, Peter Siska. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Dennis Schenk - initial implementation * Peter Siska - initial implementation *******************************************************************************/ package ch.unibe.iam.scg.archie.samples; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import ch.elexis.data.Anwender; import ch.elexis.data.Konsultation; import ch.elexis.data.Query; import ch.unibe.iam.scg.archie.model.AbstractDataProvider; import ch.unibe.iam.scg.archie.samples.i18n.Messages; /** * <p> * Provides a simple System User Overview about all users in the system. Users * are listed with their username, birthday, gender and all user groups they are * in. Further more, the list shows whether an user account is valid or not. * </p> * * $Id: UserOverview.java 766 2009-07-24 11:28:14Z peschehimself $ * * @author Peter Siska * @author Dennis Schenk * @version $Rev: 766 $ */ public class UserOverview extends AbstractDataProvider { /** * Constructs User Overview */ public UserOverview() { super(Messages.USER_OVERVIEW_TITLE); } @Override protected List<String> createHeadings() { final ArrayList<String> headings = new ArrayList<String>(5); headings.add(Messages.USER_OVERVIEW_USER); headings.add(Messages.USER_OVERVIEW_ENTRIES); headings.add(Messages.USER_OVERVIEW_BIRTHDAY); headings.add(Messages.USER_OVERVIEW_GENDER); headings.add(Messages.USER_OVERVIEW_VALID); headings.add(Messages.USER_OVERVIEW_GROUPS); return headings; } @Override protected IStatus createContent(IProgressMonitor monitor) { // initialize maps and lists final List<Comparable<?>[]> content = new ArrayList<Comparable<?>[]>(5); final HashMap<String, Integer> userEntryMap = new HashMap<String, Integer>(); // create queries final Query<Anwender> userQuery = new Query<Anwender>(Anwender.class); final Query<Konsultation> consultQuery = new Query<Konsultation>(Konsultation.class); // execute queries final List<Anwender> users = userQuery.execute(); final List<Konsultation> consults = consultQuery.execute(); // start the task monitor.beginTask(Messages.CALCULATING, users.size() + consults.size()); // sum up user entries monitor.subTask("Counting user entries"); for (final Konsultation consult : consultQuery.execute()) { String author = consult.getAuthor(); if (!author.equals("")) { int count = 1; if (userEntryMap.containsKey(author)) { count = userEntryMap.get(author); count++; } userEntryMap.put(author, count); monitor.worked(1); // monitoring } } // iterate over users and create dataset monitor.subTask("Computing results"); for (final Anwender anwender : users) { // check for cancelation if (monitor.isCanceled()) return Status.CANCEL_STATUS; final String valid = (anwender.isValid() == true) ? Messages.USER_OVERVIEW_YES : Messages.USER_OVERVIEW_NO; final String group = (anwender.getInfoElement("Groups") != null) ? anwender.getInfoElement("Groups") .toString() : Messages.USER_OVERVIEW_UNDEFINED; final String username = anwender.getLabel(true); final Integer entryCount = userEntryMap.containsKey(username) ? userEntryMap.get(username) : new Integer(0); final Comparable<?>[] row = { username, entryCount, anwender.getGeburtsdatum(), anwender.getGeschlecht(), valid, group }; content.add(row); monitor.worked(1); // monitoring } // set content this.dataSet.setContent(content); // job finished successfully monitor.done(); return Status.OK_STATUS; } /** * @see ch.unibe.iam.scg.archie.model.AbstractDataProvider#getDescription() */ @Override public String getDescription() { return Messages.USER_OVERVIEW_DESCRIPTION; } }