[5] | 1 | using System;
|
---|
| 2 | using Google.GData.Client;
|
---|
| 3 | using Google.GData.Extensions;
|
---|
| 4 | using Google.GData.Spreadsheets;
|
---|
| 5 | using System.Collections;
|
---|
| 6 | using LoggingTool.models;
|
---|
| 7 | using System.Collections.Generic;
|
---|
| 8 |
|
---|
| 9 | namespace LoggingTool.interfaces
|
---|
| 10 | {
|
---|
| 11 | class TeamUpSpeadsheetOutput : ILoggerOutput
|
---|
| 12 | {
|
---|
| 13 | private SpreadsheetsService service;
|
---|
| 14 | private SpreadsheetEntry spreadsheet;
|
---|
| 15 |
|
---|
| 16 | /* ******************************************************************************
|
---|
| 17 | * constructor TeamUpSpreadsheetOutput
|
---|
| 18 | * @description: creates the implementation of the ILoggerOutput interface
|
---|
| 19 | * ******************************************************************************/
|
---|
| 20 | public TeamUpSpeadsheetOutput(String username, String password, String spreadsheet)
|
---|
| 21 | {
|
---|
| 22 | //Log in to GoogleDocs and retrieve the right spreadsheet
|
---|
| 23 | service = new SpreadsheetsService("TeamUp Logging Spreadsheet");
|
---|
| 24 | service.setUserCredentials(username, password);
|
---|
| 25 |
|
---|
| 26 | //Get the correct spreadsheet
|
---|
| 27 | SpreadsheetQuery query = new SpreadsheetQuery();
|
---|
| 28 | SpreadsheetFeed feed = service.Query(query);
|
---|
| 29 |
|
---|
| 30 | //If a spreadsheet with the given name exists, make that our spreadsheet
|
---|
| 31 | foreach (SpreadsheetEntry entry in feed.Entries)
|
---|
| 32 | {
|
---|
| 33 | if(entry.Title.Text.Equals(spreadsheet))
|
---|
| 34 | this.spreadsheet = entry;
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | //Else, state the spreadsheet is invalid
|
---|
| 38 | if(spreadsheet == null)
|
---|
| 39 | {
|
---|
| 40 | //TODO: give a nice error message.
|
---|
| 41 | Console.WriteLine("Spreadsheet " + spreadsheet + " not found");
|
---|
| 42 |
|
---|
| 43 | }
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | /* ******************************************************************************
|
---|
| 47 | * function testConnection
|
---|
| 48 | * @return: boolean
|
---|
| 49 | * @description: returns true if the connection to the outside source is working
|
---|
| 50 | * ******************************************************************************/
|
---|
| 51 | public Boolean testConnection()
|
---|
| 52 | {
|
---|
| 53 | //TODO: Actually check for a connection.
|
---|
| 54 | return true;
|
---|
| 55 | }
|
---|
| 56 |
|
---|
| 57 | /* ******************************************************************************
|
---|
| 58 | * function send
|
---|
| 59 | * @param: message : Loggermessage
|
---|
| 60 | * @return: boolean
|
---|
| 61 | * @description: Decides to which worksheet the message should go and passes it
|
---|
| 62 | * along. Returns false if the message is not the correct type.
|
---|
| 63 | * ******************************************************************************/
|
---|
| 64 | public Boolean send(LoggerMessage message)
|
---|
| 65 | {
|
---|
| 66 | //If the message if of the correct type...
|
---|
| 67 | if (message is TeamUpSpreadsheetMessage)
|
---|
| 68 | {
|
---|
| 69 | //Cast it and check for the message type and...
|
---|
| 70 | TeamUpSpreadsheetMessage msg = (TeamUpSpreadsheetMessage)message;
|
---|
| 71 | String queryString = "";
|
---|
| 72 | if (msg.Type == TeamUpSpreadsheetMessage.QUESTIONNAIRE)
|
---|
| 73 | queryString = "Questionnaire";
|
---|
| 74 | else if(msg.Type == TeamUpSpreadsheetMessage.EVENT)
|
---|
| 75 | queryString = "Events";
|
---|
| 76 |
|
---|
| 77 | //Get the correct worksheet to perform the operation
|
---|
| 78 | AtomLink link = this.spreadsheet.Links.FindService(GDataSpreadsheetsNameTable.WorksheetRel, null);
|
---|
| 79 | WorksheetQuery workSheetQuery = new WorksheetQuery(link.HRef.ToString());
|
---|
| 80 | WorksheetFeed workSheetFeed = service.Query(workSheetQuery);
|
---|
| 81 | WorksheetEntry worksheet = null;
|
---|
| 82 | foreach (WorksheetEntry entry in workSheetFeed.Entries)
|
---|
| 83 | {
|
---|
| 84 | if(entry.Title.Text.Equals(queryString))
|
---|
| 85 | worksheet = entry;
|
---|
| 86 | }
|
---|
| 87 |
|
---|
| 88 | //Return if the worksheet doesn't exist.
|
---|
| 89 | if(worksheet == null)
|
---|
| 90 | return false;
|
---|
| 91 |
|
---|
| 92 | //Else: send the message
|
---|
| 93 | return sendToWorksheet(worksheet, msg.Data);
|
---|
| 94 | }
|
---|
| 95 | else
|
---|
| 96 | {
|
---|
| 97 | return false;
|
---|
| 98 | }
|
---|
| 99 |
|
---|
| 100 | }
|
---|
| 101 |
|
---|
| 102 |
|
---|
| 103 | /* ******************************************************************************
|
---|
| 104 | * function sendToWorksheet
|
---|
| 105 | * @param: worksheet : WorksheetEntry
|
---|
| 106 | * @param: row : List<String>
|
---|
| 107 | * @return: boolean
|
---|
| 108 | * @description: Takes the already formatted ArrayList and sends it to the specified worksheet
|
---|
| 109 | * ******************************************************************************/
|
---|
| 110 | Boolean sendToWorksheet(WorksheetEntry worksheet, List<String> row)
|
---|
| 111 | {
|
---|
| 112 | //TODO: Actually send stuff.
|
---|
| 113 | //Get the Google Docs URL
|
---|
| 114 | AtomLink listFeedLink = worksheet.Links.FindService(GDataSpreadsheetsNameTable.ListRel, null);
|
---|
| 115 |
|
---|
| 116 | //Create and perform the query to see what is in the spreadsheet
|
---|
| 117 | ListQuery query = new ListQuery(listFeedLink.HRef.ToString());
|
---|
| 118 | ListFeed feed = service.Query(query);
|
---|
| 119 |
|
---|
| 120 | //Get the first row of the spreadsheet
|
---|
| 121 | ListEntry firstRow;
|
---|
| 122 | if (feed.Entries.Count > 0)
|
---|
| 123 | firstRow = feed.Entries[0] as ListEntry;
|
---|
| 124 | else
|
---|
| 125 | return false;
|
---|
| 126 |
|
---|
| 127 | ListEntry newRow = new ListEntry();
|
---|
| 128 |
|
---|
| 129 | //Iterate through the first row elements and set the LocalNames and Values of the new cells
|
---|
| 130 | int i = 0;
|
---|
| 131 | foreach(ListEntry.Custom element in firstRow.Elements)
|
---|
| 132 | {
|
---|
| 133 |
|
---|
| 134 | ListEntry.Custom newElement = new ListEntry.Custom();
|
---|
| 135 | newElement.LocalName = element.LocalName;
|
---|
| 136 |
|
---|
| 137 | //Fillerhack, no session or playerID known atm.
|
---|
| 138 | if(element.LocalName == "session")
|
---|
| 139 | {
|
---|
| 140 | newElement.Value = "Filler";
|
---|
| 141 | }
|
---|
| 142 | //^--- FIX THIS
|
---|
| 143 | else if(i < row.Count)
|
---|
| 144 | {
|
---|
| 145 | newElement.Value = row[i];
|
---|
| 146 | i++;
|
---|
| 147 | }
|
---|
| 148 | Console.WriteLine("Worksheet "+worksheet.Title.Text+": Adding element in column " + element.LocalName + " with value " + newElement.Value);
|
---|
| 149 | newRow.Elements.Add(newElement);
|
---|
| 150 | }
|
---|
| 151 |
|
---|
| 152 | //Try to insert the row
|
---|
| 153 | ListEntry insertedRow = feed.Insert(newRow) as ListEntry;
|
---|
| 154 | return true;
|
---|
| 155 |
|
---|
| 156 | }
|
---|
| 157 | }
|
---|
| 158 | }
|
---|