001: /*
002: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005: package com.sun.portal.ubt.report.data.file.derived;
006:
007: import com.sun.portal.ubt.report.data.DataMiner;
008: import com.sun.portal.ubt.report.data.UBTActions;
009: import com.sun.portal.ubt.report.data.file.raw.ChannelWiseUserActionsMiner;
010: import com.sun.portal.ubt.report.data.file.aggregate.ChannelWiseUserActionsMinerAggregator;
011: import com.sun.portal.ubt.report.view.IllegalMinerException;
012:
013: import java.util.Iterator;
014: import java.util.Set;
015: import java.util.TreeMap;
016:
017: /**
018: *
019: */
020: public class ChannelWiseUserActionsDataSource extends
021: UBTTableDataSource {
022:
023: Set actions;
024:
025: public ChannelWiseUserActionsDataSource(DataMiner miner)
026: throws IllegalMinerException {
027: super (miner);
028: columnNames = new String[] { "Container", "Channel", "User" };
029: if (!(miner instanceof ChannelWiseUserActionsMiner || miner instanceof ChannelWiseUserActionsMinerAggregator))
030: throw new IllegalMinerException();
031: Object data = miner.getData();
032: actions = UBTActions.getProviderValidSet();
033: Object[] objAr = actions.toArray();
034: String[] cols = new String[columnNames.length
035: + (objAr != null ? objAr.length : 0)];
036: int i = 0;
037: for (i = 0; i < columnNames.length; i++) {
038: cols[i] = columnNames[i];
039: }
040: for (int j = i; j < objAr.length + i; j++) {
041: cols[j] = (String) objAr[j - i];
042: }
043: columnNames = cols;
044: if (data instanceof TreeMap) {
045: this .data = toDoubleArray((TreeMap) data);
046: }
047:
048: }
049:
050: private Object[][] toDoubleArray(TreeMap treeMap) {
051: //container, Map(channel, Map(User, (Map(action,count)))) =>
052: //container, channel user 'count'for every action
053: Object[][] dataSource = new Object[0][0];
054: if (actions != null && actions.size() > 0) {
055: Set keySet = treeMap.keySet();
056: int rows = 0;
057: Iterator keyI = keySet.iterator();
058: while (keyI.hasNext()) {
059: TreeMap channelMap = (TreeMap) treeMap.get(keyI.next());
060: Iterator it = channelMap.keySet().iterator();
061: while (it.hasNext()) {
062: rows += ((TreeMap) channelMap.get(it.next()))
063: .size();
064: }
065: }
066: dataSource = new Object[rows][columnNames.length];
067: Iterator containersI = keySet.iterator();
068: int i = 0;
069: while (containersI.hasNext()) {
070: Object container = containersI.next();
071: TreeMap channelMap = (TreeMap) treeMap.get(container);
072: Iterator channelsI = channelMap.keySet().iterator();
073: while (channelsI.hasNext()) {
074: Object channel = channelsI.next();
075: TreeMap userMap = (TreeMap) channelMap.get(channel);
076: Iterator usersI = userMap.keySet().iterator();
077: while (usersI.hasNext()) {
078: Object user = usersI.next();
079: TreeMap actionMap = (TreeMap) userMap.get(user);
080: Iterator actionsI = actionMap.keySet()
081: .iterator();
082: dataSource[i][0] = container;
083: dataSource[i][1] = channel;
084: dataSource[i][2] = user;
085: while (actionsI.hasNext()) {
086: Object action = actionsI.next();
087: for (int k = 3; k < actions.size() + 3; k++)
088: if (action.equals(columnNames[k]))
089: dataSource[i][k] = actionMap
090: .get(action);
091: }
092: i++;
093: }
094: }
095: }
096: }
097: return dataSource;
098: }
099:
100: }
|