Tengo un método,
private String createSubjectColumnForOutgoing(Message message)
{
//TODO : Changes for blocking messages of spam users
if(message.getReceiverEnvelope() != null && message.getReceiverEnvelope().getUser() != null && message.getReceiverEnvelope().getUser().isBlocked())
{
return I18N.IN_REVIEW_BY_TEAM.msg();
}
return StringUtils.deSanitizeSpecialCharacters(message.getSubject());
}
y este método se llama así,
case OUTGOING:
table.addGeneratedColumn(I18N.MESSAGETABLE_HEADER_SUBJECT.msg(), this::createSubjectColumnForOutgoing);
break;
Y el constructor de la clase son,
public MessageTable(Directory directory, boolean withFilter, Device device)
{
this(directory, new FilterConfiguration(withFilter), device);
}
public MessageTable(Directory directory, FilterConfiguration filterConfiguration, Device device)
{
Objects.requireNonNull(directory);
Objects.requireNonNull(device);
this.directory = directory;
dateTimeFormatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(LocaleAware.super.getLocale());
tableFooter = createTableFooter();
openButton = createOpenButton();
newButton = createNewButton();
messageTable = createTable(device);
tableFooter.addComponent(newButton, 0);
tableFooter.addComponent(openButton, 1);
final VerticalLayout layout = new VerticalLayout();
layout.addComponent(createFilterComponent(filterConfiguration));
layout.addComponents(tableFooter, messageTable);
layout.setComponentAlignment(tableFooter, Alignment.MIDDLE_LEFT);
rootLayout = layout;
setCompositionRoot(rootLayout);
}
Cuando se llama a este método createSubjectColumnForOutgoing
no hay ningún parámetro pasó, y que está funcionando perfectamente. No soy capaz de entender desde donde los datos que entran en el objeto Message. Busqué en Google pero no es capaz de entenderlo. Por favor ayuda. Gracias por adelantado.
Código de addGeneratedColumn
public void addGeneratedColumn(Object id, Function<BEANTYPE, ?> generatedColumn)
{
String header = null;
if(id instanceof String)
{
header = (String) id;
}
addGeneratedColumn(header, id, (source, itemId, columnId) -> generatedColumn.apply(itemId));
}
this::createSubjectColumnForOutgoing
es un método de referencia, no una ejecución del createSubjectColumnForOutgoing
método.
El table.addGeneratedColumn()
método, a la que se pasa la referencia al método, se puede llamar al método de la interfaz funcional implementada por esta referencia método. Si lo hace, se pasa una Message
instancia a la misma.
No se ha incluido el código de addGeneratedColumn()
, por lo que no sé qué tipo de interfaz funcional que espera (tal vez una Function
).
EDITAR:
Después de su edición, Function<BEANTYPE, ?> generatedColumn
es la interfaz funcional implementada por el método de referencia se pasa a addGeneratedColumn()
. Esto significa que generatedColumn.apply(itemId)
es la afirmación de que ejecuta el createSubjectColumnForOutgoing()
método, y se puede ver que itemId
se pasa al método. Esto significa que itemId
debe ser un Message
ejemplo.
Tenga en cuenta que addGeneratedColumn(Object id, Function<BEANTYPE, ?> generatedColumn)
no ejecute el createSubjectColumnForOutgoing()
método tampoco. Se pasa una interfaz funcional (implementado por una expresión lambda) que puede ejecutar ese método a un segundo addGeneratedColumn
método.