public Set execute()

in ctakes-drug-ner/src/main/java/org/apache/ctakes/drugner/fsm/machines/elements/FrequencyUnitFSM.java [1325:1485]


	public Set execute(List tokens, Set overrideSet) throws Exception {
		Set rangeSet = new HashSet();

		// maps a fsm to a token start index
		// key = fsm , value = token start index
		Map tokenStartMap = new HashMap();

		Iterator overrideTokenItr = overrideSet.iterator();
		// key = start offset, value = override BaseToken object
		Map overrideTokenMap = new HashMap();
		while (overrideTokenItr.hasNext()) {
			BaseToken t = (BaseToken) overrideTokenItr.next();
			Integer key = t.getStartOffset();
			overrideTokenMap.put(key, t);
		}

		boolean overrideOn = false;
		int overrideEndOffset = -1;
		for (int i = 0; i < tokens.size(); i++) {
			BaseToken token = (BaseToken) tokens.get(i);

			Integer key = token.getStartOffset();

			if (overrideOn) {
				if (token.getStartOffset() >= overrideEndOffset) {
					overrideOn = false;
					overrideEndOffset = -1;
				} else {
					// step to next iteration of for loop
					continue;
				}
			} else {
				if (overrideTokenMap.containsKey(key)) {
					// override one or more tokens until the override
					// token is complete
					token = (BaseToken) overrideTokenMap.get(key);
					overrideOn = true;
					overrideEndOffset = token.getEndOffset();
				}
			}

			Iterator machineItr = iv_machineSet.iterator();
			while (machineItr.hasNext()) {
				Machine fsm = (Machine) machineItr.next();

				fsm.input(token);
				BaseToken startToken = null;
			  
				State currentState = fsm.getCurrentState();
				
				if (currentState.getStartStateFlag()) {
					tokenStartMap.put(fsm, i);
								
				}
				if (currentState.getEndStateFlag()) {
					Object o = tokenStartMap.get(fsm);
					int tokenStartIndex;
					if (o == null) {
						// By default, all machines start with
						// token zero.
						tokenStartIndex = 0;
					} else {
						tokenStartIndex = ((Integer) o);
						// skip ahead over single token we don't want
						tokenStartIndex++;
					}
					
										
					if (currentState instanceof IndentStartState) {
                    	startToken = (BaseToken) tokens
						.get(tokenStartIndex + 1);
    					
                    }
                    else {
                    	startToken = (BaseToken) tokens
						.get(tokenStartIndex);
				
                    }
					
                    BaseToken endToken = null;
                    if (currentState instanceof NonTerminalEndState)
                    {
                        endToken = (BaseToken) tokens.get(i - 1);
                    }
                    else
                    {
                        endToken = token;
                    }
                    
					FrequencyUnitToken fractionToken = null;
					 if (fsm.equals(iv_EveryOtherHourMachine))
							fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_24/2);
					 else if (fsm.equals(iv_SixTimesADayMachine))
							fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_SIX);
					 else if (fsm.equals(iv_FiveTimesADayMachine))
							fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_FIVE);
					 else if (fsm.equals(iv_FourTimesADayMachine))
							fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_FOUR);
					 else if (fsm.equals(iv_ThreeTimesADayMachine))
							fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_THREE);
					else if (fsm.equals(iv_HourlyMachine) || fsm.equals(iv_HourlySuffixMachine))
							fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_24);
					else if (fsm.equals(iv_TwiceADayMachine))
						fractionToken = new FrequencyUnitToken(
							startToken.getStartOffset(), endToken
									.getEndOffset(), FrequencyUnitToken.QUANTITY_TWO);
					else if (fsm.equals(iv_DailyMachine) || fsm.equals(iv_DailySuffixMachine))
						fractionToken = new FrequencyUnitToken(
								startToken.getStartOffset(), endToken
										.getEndOffset(), FrequencyUnitToken.QUANTITY_ONE);
					else if (fsm.equals(iv_EveryOtherDayMachine))
						fractionToken = new FrequencyUnitToken(
							startToken.getStartOffset(), endToken
									.getEndOffset(), FrequencyUnitToken.QUANTITY_EVERY_OTHER_DAY);
					else if (fsm.equals(iv_WeeklyMachine)|| fsm.equals(iv_WeeklySuffixMachine))
						fractionToken = new FrequencyUnitToken(
							startToken.getStartOffset(), endToken
									.getEndOffset(), FrequencyUnitToken.QUANTITY_WEEKLY);
					else if (fsm.equals(iv_MonthlySuffixMachine))
						fractionToken = new FrequencyUnitToken(
							startToken.getStartOffset(), endToken
									.getEndOffset(), FrequencyUnitToken.QUANTITY_MONTHLY);
					else if (fsm.equals(iv_YearlySuffixMachine))
						fractionToken = new FrequencyUnitToken(
							startToken.getStartOffset(), endToken
									.getEndOffset(), FrequencyUnitToken.QUANTITY_YEARLY);
					else 
						fractionToken = new FrequencyUnitToken(
							startToken.getStartOffset(), endToken
									.getEndOffset(), FrequencyUnitToken.QUANTITY_PRN);
					
					rangeSet.add(fractionToken);
					fsm.reset();
				}
			}
		}

		// cleanup
		tokenStartMap.clear();

		// reset machines
		Iterator itr = iv_machineSet.iterator();
		while (itr.hasNext()) {
			Machine fsm = (Machine) itr.next();
			fsm.reset();
		}

		return rangeSet;
	}