Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions SplitWiseImpl/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/bin/
Binary file added SplitWiseImpl/Jar_File/SplitWise.jar
Binary file not shown.
1 change: 1 addition & 0 deletions SplitWiseImpl/Jar_File/Splitwise.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
java -cp Splitwise.jar com.main.CommandLineMain
101 changes: 101 additions & 0 deletions SplitWiseImpl/src/com/application/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package com.application;

import java.util.ArrayList;
import java.util.List;

import com.dataStore.interfaces.IUserPairOwedAmountDataStore;
import com.enums.SplitStrategyType;
import com.factory.interfaces.IDataStoreFactory;
import com.factory.interfaces.IStrategyListFactory;
import com.interfaces.IApplication;
import com.interfaces.IStrategyList;
import com.strategies.interfaces.ISplitInput;
import com.strategies.splitObjects.SplitResult;

/**
* The Class Application.
*/
public class Application implements IApplication {

/** The user pair owed amount data store. */
private IUserPairOwedAmountDataStore userPairOwedAmountDataStore;

/** The strategy list. */
private IStrategyList strategyList;




/**
* Instantiates a new application.
*
* @param dataStoreFactory the data store factory
* @param strategyListFactory the strategy list factory
* @param strategiesPresnt the strategies presnt
* @param inputReader the input reader
*/
Application(IDataStoreFactory dataStoreFactory, IStrategyListFactory strategyListFactory, List<String> strategiesPresnt) {

this.userPairOwedAmountDataStore = dataStoreFactory.getUserPairOwedAmountDataStore();

this.strategyList = strategyListFactory.getStrategyList(strategiesPresnt);
}

/**
* Adds the expense.
*
* @param expenseInput the expense input
* @return true, if successful
*/
@Override
/**
*
*/
public boolean addExpense(ISplitInput splitInput) {

if (splitInput == null) {
return false;
}

SplitResult splitResult = this.strategyList.getSplitStrategies().get(splitInput.getSplitInputType()).getFinalSplit(splitInput);

// System.out.println("result " + splitResult.getOwedBy() + " " + splitResult.getOwedTo());

return this.userPairOwedAmountDataStore.updateAmountForEntries(splitResult);
}


/**
* Gets the balance for user.
*
* @param userId the user id
* @return the balance for user
*/
@Override
public SplitResult getBalanceForUser(String userId) {

return this.userPairOwedAmountDataStore.getBalancesForUser(userId);
}

/**
* Gets the all balances.
*
* @return the all balances
*/
@Override
public SplitResult getAllBalances() {
// TODO Auto-generated method stub
return this.userPairOwedAmountDataStore.getBalancesForAllUsers();
}

/**
* Gets the strategies name.
*
* @return the strategies name
*/
@Override
public List<SplitStrategyType> getStrategiesName() {
return new ArrayList<SplitStrategyType>(this.strategyList.getSplitStrategies().keySet());
}

}
124 changes: 124 additions & 0 deletions SplitWiseImpl/src/com/application/ApplicationInterface.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package com.application;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.enums.InputCommand;
import com.enums.SplitStrategyType;
import com.factory.interfaces.IDataStoreFactory;
import com.factory.interfaces.IStrategyListFactory;
import com.interfaces.IApplication;
import com.interfaces.IApplicationInterface;
import com.ioParser.interfaces.IInputReader;
import com.ioParser.interfaces.IResultFormatter;
import com.strategies.splitObjects.SplitResult;
import com.user.UserDetails;

// TODO: Auto-generated Javadoc
/**
* The Class ApplicationInterface.
*/
public class ApplicationInterface implements IApplicationInterface {

/** The application. */
private IApplication application;


/** The data store factory. */
private IDataStoreFactory dataStoreFactory;

/** The strategy list factory. */
private IStrategyListFactory strategyListFactory;

/** The result formatter. */
private IResultFormatter resultFormatter;

/** The input reader. */
private IInputReader inputReader;


/**
* Instantiates a new application interface.
*
* @param dataStoreFactory the data store factory
* @param strategyListFactory the strategy list factory
* @param resultFormatter the result formatter
* @param inputReader the input reader
*/
public ApplicationInterface(IDataStoreFactory dataStoreFactory, IStrategyListFactory strategyListFactory,
IResultFormatter resultFormatter, IInputReader inputReader) {
super();
this.dataStoreFactory = dataStoreFactory;
this.strategyListFactory = strategyListFactory;
this.resultFormatter = resultFormatter;
this.inputReader = inputReader;
}

/**
* Instantiate application.
*/
@Override
public void instantiateApplication() {
this.application = new Application(dataStoreFactory, strategyListFactory, Arrays.asList((String) SplitStrategyType.EQUAL.name(),(String) SplitStrategyType.EXACT.name(), (String)SplitStrategyType.PERCENT.name()));

}

/**
* Run input string.
*
* @param input the input
* @return the list
*/
@Override
public List<String> runInputString(String input) {
String[] inputArr = input.split(" ");

List<String> inputList = new ArrayList<String>();

int i = 1;

while (i < inputArr.length) {
inputList.add(inputArr[i]);

i++;
}

if (InputCommand.EXPENSE == InputCommand.valueOf(inputArr[0])) {
this.application.addExpense(this.inputReader.parseInput(inputList));

return Arrays.asList();
}

if (InputCommand.SHOW == InputCommand.valueOf(inputArr[0])) {
SplitResult splitResult;
if (inputList.size() == 0) {
splitResult = this.application.getAllBalances();
} else {
splitResult = this.application.getBalanceForUser(inputList.get(0));
}

// System.out.println("result" + splitResult.getOwedBy() + " " + splitResult.getOwedTo());

return this.resultFormatter.getFormattedResult(splitResult, this.dataStoreFactory.getUserDataStore());

}

return new ArrayList<String>();

}

/**
* Adds the new user.
*
* @param userDetails the user details
* @return true, if successful
*/
@Override
public boolean addNewUser(UserDetails userDetails) {
return this.dataStoreFactory.getUserDataStore().addNewUser(userDetails);
}



}
88 changes: 88 additions & 0 deletions SplitWiseImpl/src/com/dataStore/UserDataStore.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.dataStore;

import java.util.HashMap;

import com.dataStore.interfaces.IUserDataStore;
import com.user.UserDetails;

/**
* The Class UserDataStore.
*/
public class UserDataStore implements IUserDataStore {

/** The user detail map. */
HashMap<String, UserDetails> userDetailMap = new HashMap<String, UserDetails>();

/**
* Gets the user details.
*
* @param userId the user id
* @return the user details
*/
@Override
public UserDetails getUserDetails(String userId) {
// TODO Auto-generated method stub
return this.userDetailMap.get(userId);
}

/**
* Adds the new user.
*
* @param userDetails the user details
* @return true, if successful
*/
@Override
public boolean addNewUser(UserDetails userDetails) {
if (userDetails != null && userDetails.getUserId() != null && !userDetails.getUserId().equals("")) {
this.userDetailMap.put(userDetails.getUserId(), userDetails);

return true;
}

return false;
}

/**
* Delete user.
*
* @param userId the user id
* @return true, if successful
*/
@Override
public boolean deleteUser(String userId) {
if (userId != null && !userId.equals("")) {
this.userDetailMap.remove(userId);

return true;
}
return false;
}

/**
* Update user details.
*
* @param userId the user id
* @param userDetails the user details
* @return true, if successful
*/
@Override
public boolean updateUserDetails(String userId, UserDetails userDetails) {
if (userId != null && !userId.equals("") && userDetails != null) {
if (userDetails.getName() != null) {
this.userDetailMap.get(userId).setName(userDetails.getName());
}

if (userDetails.getEmail() != null) {
this.userDetailMap.get(userId).setEmail(userDetails.getEmail());
}

if (userDetails.getPhoneNumber() != null) {
this.userDetailMap.get(userId).setPhoneNumber(userDetails.getPhoneNumber());
}

return true;
}
return false;
}

}
Loading