Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java =================================================================== diff -u -r7e1e8414045a6435bbd09cb35b0058b1573389b2 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java (.../VoteAppConstants.java) (revision 7e1e8414045a6435bbd09cb35b0058b1573389b2) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java (.../VoteAppConstants.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -108,6 +108,7 @@ public static final String MAP_QUESTION_CONTENT ="mapQuestionContent"; public static final String MAP_OPTIONS_CONTENT ="mapOptionsContent"; public static final String MAP_VOTERATES_CONTENT ="mapVoteRatesContent"; + public static final String MAP_STANDARD_USER_COUNT ="mapStandardUserCount"; public static final String MAP_STANDARD_NOMINATIONS_CONTENT ="mapStandardNominationsContent"; public static final String MAP_STANDARD_RATES_CONTENT ="mapStandardRatesContent"; public static final String MAP_OPTIONS_CONTENT_FCK ="mapOptionsContentFck"; Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/IVoteUserDAO.java =================================================================== diff -u -rafd9f8463f033997ae0deaa55116a875d9da776f -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/IVoteUserDAO.java (.../IVoteUserDAO.java) (revision afd9f8463f033997ae0deaa55116a875d9da776f) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/IVoteUserDAO.java (.../IVoteUserDAO.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -41,6 +41,10 @@ public VoteQueUsr getVoteUserBySession(final Long queUsrId, final Long voteSessionId); + public int getCompletedVoteUserBySessionUid(final Long voteSessionUid); + + public List getVoteUserBySessionUid(final Long voteSessionUid); + public VoteQueUsr getVoteQueUsrById(long voteQueUsrId); public void saveVoteUser(VoteQueUsr voteUser); Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUserDAO.java =================================================================== diff -u -r714df94653eb0195275d4086ece5b856c3a632c3 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUserDAO.java (.../VoteUserDAO.java) (revision 714df94653eb0195275d4086ece5b856c3a632c3) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUserDAO.java (.../VoteUserDAO.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -22,6 +22,7 @@ package org.lamsfoundation.lams.tool.vote.dao.hibernate; +import java.util.Iterator; import java.util.List; import org.hibernate.FlushMode; @@ -88,6 +89,40 @@ .list(); return list; } + + public List getVoteUserBySessionUid(final Long voteSessionUid) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(LOAD_USER_FOR_SESSION) + .setLong("voteSessionId", voteSessionUid.longValue()) + .list(); + return list; + } + + public int getCompletedVoteUserBySessionUid(final Long voteSessionUid) + { + HibernateTemplate templ = this.getHibernateTemplate(); + List list = getSession().createQuery(LOAD_USER_FOR_SESSION) + .setLong("voteSessionId", voteSessionUid.longValue()) + .list(); + + int completedSessionUserCount=0; + if(list != null && list.size() > 0){ + Iterator listIterator=list.iterator(); + while (listIterator.hasNext()) + { + VoteQueUsr user=(VoteQueUsr)listIterator.next(); + logger.debug("user: " + user); + if (user.getVoteSession().getSessionStatus().equals("COMPLETED")) + { + ++completedSessionUserCount; + } + } + } + + return completedSessionUserCount; + } + public VoteQueUsr getVoteUserBySession(final Long queUsrId, final Long voteSessionId) { Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUsrAttemptDAO.java =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUsrAttemptDAO.java (.../VoteUsrAttemptDAO.java) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUsrAttemptDAO.java (.../VoteUsrAttemptDAO.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -65,7 +65,9 @@ private static final String LOAD_ALL_ENTRIES = "from voteUsrAttempt in class VoteUsrAttempt"; + private static final String LOAD_DISTINCT_USER_ENTRIES = "select distinct voteUsrAttempt.queUsrId from VoteUsrAttempt voteUsrAttempt"; + public VoteUsrAttempt getVoteUserAttemptByUID(Long uid) { return (VoteUsrAttempt) this.getHibernateTemplate() @@ -444,6 +446,8 @@ } + + public int getCompletedSessionEntriesCount(final Long voteSessionUid) { HibernateTemplate templ = this.getHibernateTemplate(); Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/IVoteService.java =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/IVoteService.java (.../IVoteService.java) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/IVoteService.java (.../IVoteService.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -67,6 +67,10 @@ public VoteQueUsr retrieveVoteQueUsr(Long userId) throws VoteApplicationException; + public List getVoteUserBySessionUid(final Long voteSessionUid) throws VoteApplicationException; + + public int getCompletedVoteUserBySessionUid(final Long voteSessionUid) throws VoteApplicationException; + public VoteQueContent getQuestionContentByDisplayOrder(final Long displayOrder, final Long voteContentUid) throws VoteApplicationException; public List getAttemptsListForUserAndQuestionContent(final Long queUsrId, final Long voteQueContentId) throws VoteApplicationException; Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java (.../VoteServicePOJO.java) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java (.../VoteServicePOJO.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -843,7 +843,36 @@ } } - + + public int getCompletedVoteUserBySessionUid(final Long voteSessionUid) throws VoteApplicationException + { + try + { + return voteUserDAO.getCompletedVoteUserBySessionUid(voteSessionUid); + } + catch (DataAccessException e) + { + throw new VoteApplicationException("Exception occured when lams is retrieving completed users by session uid: " + + e.getMessage(), + e); + } + } + + public List getVoteUserBySessionUid(final Long voteSessionUid) throws VoteApplicationException + { + try + { + return voteUserDAO.getVoteUserBySessionUid(voteSessionUid); + } + catch (DataAccessException e) + { + throw new VoteApplicationException("Exception occured when lams is retrieving users by session uid: " + + e.getMessage(), + e); + } + } + + public List getVoteUserBySessionOnly(final VoteSession voteSession) throws VoteApplicationException { try @@ -946,6 +975,7 @@ } } + public int countSessionComplete() throws VoteApplicationException { try @@ -958,7 +988,8 @@ + e.getMessage(),e); } } - + + public int countSessionIncomplete() throws VoteApplicationException { try Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -22,6 +22,7 @@ package org.lamsfoundation.lams.tool.vote.web; +import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -648,6 +649,7 @@ logger.debug("mapVoteRatesContent: " + mapVoteRatesContent); + List distinctSessionUsers=new ArrayList(); boolean sessionLevelCharting=true; int entriesCount=0; Set userEntries=null; @@ -658,13 +660,29 @@ userEntries=voteService.getSessionUserEntries(toolSessionUid); logger.debug("sessionUserCount: " + userEntries.size()); + distinctSessionUsers=voteService.getVoteUserBySessionUid(toolSessionUid); + logger.debug("distinctSessionUsers: " + distinctSessionUsers); + + int completedSessionUserCount=voteService.getCompletedVoteUserBySessionUid(toolSessionUid); + logger.debug("completedSessionUserCount: " + completedSessionUserCount); + + int completedEntriesCount=voteService.getCompletedSessionEntriesCount(toolSessionUid); logger.debug("completedEntriesCount: " + completedEntriesCount); if (voteMonitoringForm != null) { - voteMonitoringForm.setSessionUserCount(new Integer(entriesCount).toString()); - voteMonitoringForm.setCompletedSessionUserCount(new Integer(completedEntriesCount).toString()); + if (distinctSessionUsers != null) + { + logger.debug("distinctSessionUsers count: " + distinctSessionUsers.size()); + voteMonitoringForm.setSessionUserCount(new Integer(distinctSessionUsers.size()).toString()); + } + else + { + voteMonitoringForm.setSessionUserCount(new Integer(0).toString()); + } + + voteMonitoringForm.setCompletedSessionUserCount(new Integer(completedSessionUserCount).toString()); } } else @@ -682,12 +700,15 @@ logger.debug("userEntries: " + userEntries); logger.debug("sessionLevelCharting: " + sessionLevelCharting); + + Map mapStandardUserCount= new TreeMap(new VoteComparator()); logger.debug("setting existing content data from the db"); mapOptionsContent.clear(); Iterator queIterator=voteContent.getVoteQueContents().iterator(); Long mapIndex=new Long(1); logger.debug("mapOptionsContent: " + mapOptionsContent); + int totalStandardVotesCount=0; while (queIterator.hasNext()) { VoteQueContent voteQueContent=(VoteQueContent) queIterator.next(); @@ -702,6 +723,8 @@ logger.debug("getting votesCount based on session: " + toolSessionUid); votesCount=voteService.getAttemptsForQuestionContentAndSessionUid(voteQueContent.getUid(), toolSessionUid); logger.debug("votesCount for questionContent uid: " + votesCount + " for" + voteQueContent.getUid()); + mapStandardUserCount.put(mapIndex.toString(),new Integer(votesCount).toString()); + totalStandardVotesCount=totalStandardVotesCount + votesCount; } else { @@ -719,29 +742,19 @@ logger.debug("voteRate" + voteRate); mapVoteRatesContent.put(mapIndex.toString(), new Double(voteRate).toString()); - - - /** - * make the first entry the default(first) one for jsp - */ - if (mapIndex.longValue() == 1) - { - request.getSession().setAttribute(DEFAULT_OPTION_CONTENT, voteQueContent.getQuestion()); - } - mapIndex=new Long(mapIndex.longValue()+1); } } - logger.debug("Map initialized with existing contentid to: " + mapOptionsContent); + logger.debug("test1: Map initialized with existing contentid to: " + mapOptionsContent); Map mapStandardNominationsContent= new TreeMap(new VoteComparator()); mapStandardNominationsContent=mapOptionsContent; logger.debug("mapStandardNominationsContent: " + mapStandardNominationsContent); Map mapStandardRatesContent= new TreeMap(new VoteComparator()); mapStandardRatesContent=mapVoteRatesContent; - logger.debug("mapStandardRatesContent: " + mapStandardRatesContent); + logger.debug("test1: mapStandardRatesContent: " + mapStandardRatesContent); + logger.debug("test1: mapStandardUserCount: " + mapStandardUserCount); - Iterator itListQuestions = userEntries.iterator(); int mapVoteRatesSize=mapVoteRatesContent.size(); logger.debug("mapVoteRatesSize: " + mapVoteRatesSize); @@ -753,16 +766,27 @@ double share=100d-total ; logger.debug("share: " + share); + logger.debug("totalStandardVotesCount: " + totalStandardVotesCount); - mapStandardNominationsContent.put(mapIndex.toString(), "Open vote"); + logger.debug("distinctSessionUsers: " + distinctSessionUsers); + int userEnteredVotesCount=0; + if (distinctSessionUsers != null) + { + userEnteredVotesCount=totalStandardVotesCount- distinctSessionUsers.size(); + } + else + { + userEnteredVotesCount=totalStandardVotesCount; + } + + logger.debug("userEnteredVotesCount: " + userEnteredVotesCount); + + mapStandardNominationsContent.put(mapIndex.toString(), "Open Vote"); mapStandardRatesContent.put(mapIndex.toString(), new Double(share).toString()); + mapStandardUserCount.put(mapIndex.toString(), new Integer(userEnteredVotesCount).toString()); + + /* - request.getSession().setAttribute(MAP_STANDARD_NOMINATIONS_CONTENT, mapStandardNominationsContent); - logger.debug("MAP_STANDARD_NOMINATIONS_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_NOMINATIONS_CONTENT)); - - request.getSession().setAttribute(MAP_STANDARD_RATES_CONTENT, mapStandardRatesContent); - logger.debug("MAP_STANDARD_RATES_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_RATES_CONTENT)); - double totalUserRate=0d; while (itListQuestions.hasNext()) { @@ -822,13 +846,26 @@ mapIndex=new Long(mapIndex.longValue()+1); } } + + */ + /* logger.debug("Map initialized with mapVoteRatesContent: " + mapVoteRatesContent); request.getSession().setAttribute(MAP_VOTERATES_CONTENT, mapVoteRatesContent); logger.debug("starter initialized the MAP_VOTERATES_CONTENT Map: " + request.getSession().getAttribute(MAP_VOTERATES_CONTENT)); request.getSession().setAttribute(MAP_OPTIONS_CONTENT, mapOptionsContent); logger.debug("final starter initialized the MAP_OPTIONS_CONTENT Map: " + request.getSession().getAttribute(MAP_OPTIONS_CONTENT) ); + */ + + request.getSession().setAttribute(MAP_STANDARD_NOMINATIONS_CONTENT, mapStandardNominationsContent); + logger.debug("test2: MAP_STANDARD_NOMINATIONS_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_NOMINATIONS_CONTENT)); + + request.getSession().setAttribute(MAP_STANDARD_RATES_CONTENT, mapStandardRatesContent); + logger.debug("test2: MAP_STANDARD_RATES_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_RATES_CONTENT)); + + request.getSession().setAttribute(MAP_STANDARD_USER_COUNT, mapStandardUserCount); + logger.debug("test2: MAP_STANDARD_USER_COUNT: " + request.getSession().getAttribute(MAP_STANDARD_USER_COUNT)); } } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGenerator.java =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGenerator.java (.../VoteChartGenerator.java) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteChartGenerator.java (.../VoteChartGenerator.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -53,8 +53,8 @@ { logger.debug("dispatching doGet for VoteChartGenerator..."); - logger.debug("MAP_STANDARD_RATES_CONTENT Map: " + request.getSession().getAttribute(MAP_STANDARD_RATES_CONTENT)); - logger.debug("MAP_STANDARD_NOMINATIONS_CONTENT Map: " + request.getSession().getAttribute(MAP_STANDARD_NOMINATIONS_CONTENT)); + logger.debug("test6: MAP_STANDARD_NOMINATIONS_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_NOMINATIONS_CONTENT)); + logger.debug("test6: MAP_STANDARD_RATES_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_RATES_CONTENT)); OutputStream out= response.getOutputStream(); try{ Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteMonitoringAction.java =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteMonitoringAction.java (.../VoteMonitoringAction.java) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/VoteMonitoringAction.java (.../VoteMonitoringAction.java) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -123,6 +123,8 @@ ServletException { logger.debug("dispatching submitSession..."); + logger.debug("test3: MAP_STANDARD_NOMINATIONS_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_NOMINATIONS_CONTENT)); + logger.debug("test3: MAP_STANDARD_RATES_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_RATES_CONTENT)); IVoteService voteService=null; @@ -170,6 +172,9 @@ voteMonitoringForm.setSbmtSuccess(new Boolean(false).toString()); request.getSession().setAttribute(REQUEST_LEARNING_REPORT, new Boolean(false).toString()); + + logger.debug("test4: MAP_STANDARD_NOMINATIONS_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_NOMINATIONS_CONTENT)); + logger.debug("test4: MAP_STANDARD_RATES_CONTENT: " + request.getSession().getAttribute(MAP_STANDARD_RATES_CONTENT)); return (mapping.findForward(LOAD_MONITORING)); } Index: lams_tool_vote/web/WEB-INF/struts-config.xml =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -458,10 +458,10 @@ /> - - + + + Index: lams_tool_vote/web/learning/IndividualLearnerResults.jsp =================================================================== diff -u -r83ebb6f565f6d5ce638160e37fc6793c074c6356 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/web/learning/IndividualLearnerResults.jsp (.../IndividualLearnerResults.jsp) (revision 83ebb6f565f6d5ce638160e37fc6793c074c6356) +++ lams_tool_vote/web/learning/IndividualLearnerResults.jsp (.../IndividualLearnerResults.jsp) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -38,14 +38,14 @@ - + - + Index: lams_tool_vote/web/monitoring/PullDownMenu.jsp =================================================================== diff -u --- lams_tool_vote/web/monitoring/PullDownMenu.jsp (revision 0) +++ lams_tool_vote/web/monitoring/PullDownMenu.jsp (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -0,0 +1,74 @@ +<%-- +Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) +License Information: http://lamsfoundation.org/licensing/lams/2.0/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA + + http://www.gnu.org/licenses/gpl.txt +--%> + + +<%@ taglib uri="tags-bean" prefix="bean"%> +<%@ taglib uri="tags-html" prefix="html"%> +<%@ taglib uri="tags-logic" prefix="logic" %> +<%@ taglib uri="tags-core" prefix="c"%> +<%@ taglib uri="tags-fmt" prefix="fmt" %> +<%@ taglib uri="fck-editor" prefix="FCK" %> +<%@ taglib uri="tags-lams" prefix="lams" %> + + + + + + + + + + + +
+ + +
+
+
+ + \ No newline at end of file Index: lams_tool_vote/web/monitoring/SummaryContent.jsp =================================================================== diff -u -ra178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8 -rc8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84 --- lams_tool_vote/web/monitoring/SummaryContent.jsp (.../SummaryContent.jsp) (revision a178ed11c7cc66dbfbff48645b8c6cc33eb2dbf8) +++ lams_tool_vote/web/monitoring/SummaryContent.jsp (.../SummaryContent.jsp) (revision c8f1ea88d18b9b6b1ee0002d299ac9bfb1431d84) @@ -32,6 +32,8 @@ + + @@ -43,59 +45,34 @@
+ - - - + +
+ + + + +
+ +
+
- - - - - - - - - - - - - - - + + + + + + + + - + - - @@ -121,10 +98,9 @@ - - - + - - - - - - - - - - + + + + +
                   + +
  
  
+ @@ -142,28 +118,30 @@ - - - - - -
- - - ( ) -
+ + + + + + + + + + + + +  ( ) + + +
+