Skip to content
9 changes: 9 additions & 0 deletions src/com/synacy/Chargeable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.synacy;

import java.math.BigDecimal;

public interface Chargeable {

public BigDecimal calculateCost();

}
7 changes: 7 additions & 0 deletions src/com/synacy/Compressible.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.synacy;

public interface Compressible {

public String generateCompressedMessage();

}
13 changes: 8 additions & 5 deletions src/com/synacy/FaxMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.math.BigDecimal;
import java.util.Random;

public class FaxMessage extends MessageCompressor {
public class FaxMessage implements Chargeable, Sendable, Compressible {

long duration;
String sendTo;
Expand All @@ -20,17 +20,20 @@ public FaxMessage(String sendTo, byte[] image, ImageType imageType, long duratio
this.imageType = imageType;
}

@Override
public String generateCompressedMessage() {
return new MessageCompressor().compressFaxMessage(image, imageType);
}

@Override
public BigDecimal calculateCost() {
System.out.println("calculating fax cost based on duration and image size...");
return BigDecimal.valueOf(new Random().nextDouble());
}

@Override
public String getDestination() {
return sendTo;
}

public String generateCompressedMessage() {
return compressFaxMessage(image, imageType);
}

}
7 changes: 7 additions & 0 deletions src/com/synacy/Sendable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.synacy;

public interface Sendable extends Compressible {

public String getDestination();

}
13 changes: 8 additions & 5 deletions src/com/synacy/SmsMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.math.BigDecimal;
import java.util.Random;

public class SmsMessage extends MessageCompressor {
public class SmsMessage implements Chargeable, Sendable, Compressible {

long parts;
String sendTo;
Expand All @@ -16,17 +16,20 @@ public SmsMessage(String sendTo, String content) {
this.sendTo = sendTo;
}

@Override
public String generateCompressedMessage() {
return new MessageCompressor().compressSmsMessage(content);
}

@Override
public BigDecimal calculateCost() {
System.out.println("calculating sms cost based part count");
return BigDecimal.valueOf(new Random().nextDouble());
}

@Override
public String getDestination() {
return sendTo;
}

public String generateCompressedMessage() {
return compressSmsMessage(content);
}

}
16 changes: 5 additions & 11 deletions src/com/synacy/charging/ChargingService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.synacy.charging;

import com.synacy.FaxMessage;
import com.synacy.SmsMessage;
import com.synacy.Chargeable;

import java.math.BigDecimal;

Expand All @@ -10,17 +9,12 @@
*/
public class ChargingService {

public void chargeFaxMessage(FaxMessage faxMessage) {
BigDecimal cost = faxMessage.calculateCost();
chargeMessage(cost);
public void chargeMessage(Chargeable message) {
BigDecimal cost = message.calculateCost();
printChargeMessage(cost);
}

public void chargeSmsMessage(SmsMessage smsMessage) {
BigDecimal cost = smsMessage.calculateCost();
chargeMessage(cost);
}

private void chargeMessage(BigDecimal bigDecimal) {
private void printChargeMessage(BigDecimal bigDecimal) {
System.out.println("Charging...");
//charging logic...
}
Expand Down
11 changes: 4 additions & 7 deletions src/com/synacy/charging/Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.synacy.charging;

import com.synacy.Chargeable;
import com.synacy.FaxMessage;
import com.synacy.SmsMessage;
import com.synacy.compress.ImageType;
Expand All @@ -13,7 +14,7 @@ public class Main {
/**
* Assume this will be the messages that has to be charged
*/
public static List<Object> generateMessages() {
public static List<Chargeable> generateMessages() {
return List.of(new FaxMessage("631111111", "some jpeg image".getBytes(), ImageType.JPEG, 100),
new FaxMessage("632222222", "some tiff image".getBytes(), ImageType.TIFF, 100),
new SmsMessage("633333333", "sms message"),
Expand All @@ -28,15 +29,11 @@ public static List<Object> generateMessages() {
* */
public static void main(String args[]) {

List<Object> messages = generateMessages();
List<Chargeable> messages = generateMessages();

ChargingService chargingService = new ChargingService();
messages.forEach((message) -> {
if (message instanceof FaxMessage) {
chargingService.chargeFaxMessage((FaxMessage) message);
} else if (message instanceof SmsMessage) {
chargingService.chargeSmsMessage((SmsMessage) message);
}
chargingService.chargeMessage(message);
});
}

Expand Down
19 changes: 6 additions & 13 deletions src/com/synacy/genericsending/GenericMessageSenderService.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
package com.synacy.genericsending;

import com.synacy.FaxMessage;
import com.synacy.SmsMessage;
import com.synacy.Sendable;

/**
* Created by froilan on 5/5/17.
*/
public class GenericMessageSenderService {

public void send(Object message) {
if (message instanceof FaxMessage) {
String faxCompressedMessage = ((FaxMessage) message).generateCompressedMessage();
String destination = ((FaxMessage) message).getDestination();
//some fax sending specific logic here that uses destination and the compressed message.
} else if (message instanceof SmsMessage) {
String smsCompressedMessage = ((SmsMessage) message).generateCompressedMessage();
String destination = ((SmsMessage) message).getDestination();
//some fax sending specific logic here that uses destination and the compressed message.
}
//some post sending logic here...
public void send(Sendable message) {

String faxCompressedMessage = message.generateCompressedMessage();
String destination = message.getDestination();

}

}
9 changes: 5 additions & 4 deletions src/com/synacy/genericsending/Main.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package com.synacy.genericsending;

import com.synacy.FaxMessage;
import com.synacy.Sendable;
import com.synacy.SmsMessage;
import com.synacy.compress.ImageType;

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

/**
Expand All @@ -16,7 +15,7 @@ public class Main {
/**
* Assume this will be the messages that has to be sent
*/
public static List<Object> generateMessages() {
public static List<Sendable> generateMessages() {
return List.of(new FaxMessage("631111111", "some jpeg image".getBytes(), ImageType.JPEG, 100),
new FaxMessage("632222222", "some tiff image".getBytes(), ImageType.TIFF, 100),
new SmsMessage("633333333", "sms message"),
Expand All @@ -30,8 +29,10 @@ public static List<Object> generateMessages() {
* How would we remove these if statements, but retain GenericMessageSenderService's capability to send any message types?
* */
public static void main (String args[]) {

GenericMessageSenderService genericMessageSenderService = new GenericMessageSenderService();
List<Object> generatedMessages = generateMessages();
List<Sendable> generatedMessages = generateMessages();
generatedMessages.forEach(genericMessageSenderService::send);

}
}